作者:韩信子 @ShowMeAI
教程地址:http://www.showmeai.tech/tutorials/33
本文地址:http://www.showmeai.tech/article-detail/147
申明:版权所有,转载请分割平台与作者并注明出处
当咱们提到 python 数据分析的时候,大部分状况下都会应用 Pandas 进行操作。pandas 整个系列笼罩以下内容:
- 图解 Pandas 外围操作函数大全
- 图解 Pandas 数据变换高级函数
- Pandas 数据分组与操作
本篇为『图解 Pandas 数据变换高级函数』。
一、Pandas 的数据变换高级函数
在数据处理过程中,常常须要对 DataFrame 进行逐行、逐列和逐元素的操作(例如,机器学习中的特色工程阶段)。Pandas 中有十分高效繁难的内置函数能够实现,最外围的 3 个函数是 map、apply 和 applymap。上面咱们以图解的形式介绍这 3 个办法的利用办法。
首先,通过 numpy 模仿生成一组数据。数据集如下所示,各列别离代表身高(height)、体重(weight)、是否吸烟(smoker)、性别(gender)、年龄(age)和肤色(color)。
import numpy as np
import pandas as pd
boolean=[True,False]
gender=["男","女"]
color=["white","black","yellow"]
data=pd.DataFrame({"height":np.random.randint(150,190,100),
"weight":np.random.randint(40,90,100),
"smoker":[boolean[x] for x in np.random.randint(0,2,100)],
"gender":[gender[x] for x in np.random.randint(0,2,100)],
"age":np.random.randint(15,90,100),
"color":[color[x] for x in np.random.randint(0,len(color),100) ]
}
)
二、Series 数据处理
2.1 map 办法
当咱们须要把 series 数据逐元素做同一个变换操作时,咱们不会应用 for 循环(效率很低),咱们会应用 Series.map()来实现,通过简略的一行代码即可实现变换处理。例如,咱们把数据集中 gender 列的男替换为 1,女替换为 0。
上面咱们通过图解的形式,拆解 map 的操作过程:
(1)应用字典映射的 map 原理
#①应用字典进行映射
data["gender"] = data["gender"].map({"男":1, "女":0})
(2)应用函数映射的 map 原理
#②应用函数
def gender_map(x):
gender = 1 if x == "男" else 0
return gender
#留神这里传入的是函数名,不带括号
data["gender"] = data["gender"].map(gender_map)
如下面例子所示,应用 map 时,咱们能够通过字典或者函数进行映射解决。对于这两种形式,map 都是把对应的数据一一当作参数传入到字典或函数中,进行映射失去后果。
2.2 apply 办法
当咱们须要实现简单的数据映射操作解决时,咱们会应用到 Series 对象的 apply 办法,它和 map 办法相似,但可能传入性能更为简单的函数。
咱们通过一个例子来了解一下。例如,咱们要对年龄 age 列进行调整(加上或减去一个值),这个加上或减去的值咱们心愿通过传入。此时,多了 1 个参数 bias,用 map 办法是操作不了的(传入 map 的函数只能接管一个参数),apply 办法则能够解决这个问题。
def apply_age(x,bias):
return x+bias
#以元组的形式传入额定的参数
data["age"] = data["age"].apply(apply_age,args=(-3,))
能够看到 age 列都减了 3,这是个非常简单的例子,apply 在简单场景下有着更灵便的作用。
总结一下,对于 Series 而言,map 能够实现大部分数据的对立映射解决,而 apply 办法适宜对数据做简单灵便的函数映射操作。
三、DataFrame 数据处理
3.1 apply 办法
DataFrame 借助 apply 办法,能够接管各种各样的函数(Python 内置的或自定义的)对数据进行解决,非常灵活便捷。
把握 DataFrame 的 apply 办法须要先理解一下 axis 的概念,在 DataFrame 对象的大多数办法中,都会有 axis 这个参数,它管制了你指定的操作是沿着 0 轴还是 1 轴进行。axis= 0 代表操作对列 columns 进行,axis= 1 代表操作对行 row 进行,如下图所示。
咱们来通过例子了解一下这个办法的应用。例如,咱们对 data 中的数值列别离进行取对数和求和的操作。这时应用 apply 进行相应的操作,两行代码能够很轻松地解决。
(1)按列求和的实现过程
因为是对列进行操作,所以须要指定 axis=0。本次实现的底层,apply 到底做了什么呢?咱们来通过图解的形式了解一下:
# 沿着 0 轴求和
data[["height","weight","age"]].apply(np.sum, axis=0)
(2)按列取对数的实现过程
因为是对列进行操作,所以须要指定 axis=0。本次实现的底层,apply 到底做了什么呢?咱们来通过图解的形式了解一下:
# 沿着 0 轴求和
data[["height","weight","age"]].apply(np.sum, axis=0)
# 沿着 0 轴取对数
data[["height","weight","age"]].apply(np.log, axis=0)
当沿着轴 0(axis=0)进行操作时,会将各列 (columns) 默认以 Series 的模式作为参数,传入到你指定的操作函数中,操作后合并并返回相应的后果。
(3)按行计算 BMI 指数
那咱们理论利用过程中有没有(axis=1)的状况呢?例如,咱们要依据数据集中的身高和体重计算每个人的 BMI 指数(体检时罕用的指标,掂量人体瘦削水平和是否衰弱的重要规范),计算公式是:体重指数 BMI= 体重 / 身高的平方(国内单位 kg/㎡)。
这个操作须要对每个样本(行)进行计算,咱们应用 apply 并指定 axis= 1 来实现,代码和图解如下:
def BMI(series):
weight = series["weight"]
height = series["height"]/100
BMI = weight/height**2
return BMI
data["BMI"] = data.apply(BMI,axis=1)
当 apply 设置了 axis= 1 对行进行操作时,会默认将每一行数据以 Series 的模式(Series 的索引为列名)传入指定函数,返回相应的后果。
做个总结,DataFrame 中利用 apply 办法:
- 当 axis= 0 时,对每列 columns 执行指定函数;当 axis= 1 时,对每行 row 执行指定函数。
- 无论 axis= 0 还是 axis=1,其传入指定函数的默认模式均为 Series,能够通过设置 raw=True 传入 numpy 数组。
- 对每个 Series 执行后果后,会将后果整合在一起返回(若想有返回值,定义函数时须要 return 相应的值)
- 当然,DataFrame 的 apply 和 Series 的 apply 一样,也能接管更简单的函数,如传入参数等,实现原理是一样的,具体用法详见官网文档。
3.2 applymap 办法
applymap 是另一个 DataFrame 中可能会用到的办法,它会对 DataFrame 中的每个单元格执行指定函数的操作,如下例所示:
df = pd.DataFrame(
{"A":np.random.randn(5),
"B":np.random.randn(5),
"C":np.random.randn(5),
"D":np.random.randn(5),
"E":np.random.randn(5),
}
)
咱们心愿对 DataFrame 中所有的数保留两位小数显示,applymap 能够帮忙咱们很快实现,代码和图解如下:
df.applymap(lambda x:"%.2f" % x)
材料与代码下载
本教程系列的代码能够在 ShowMeAI 对应的 github 中下载,可本地 python 环境运行,能迷信上网的宝宝也能够间接借助 google colab 一键运行与交互操作学习哦!
本系列教程波及的速查表能够在以下地址下载获取
- Pandas 速查表
- NumPy 速查表
- Matplotlib 速查表
- Seaborn 速查表
拓展参考资料
- Pandas 官网教程
- Pandas 中文教程
ShowMeAI 相干文章举荐
- 数据分析介绍
- 数据分析思维
- 数据分析的数学根底
- 业务认知与数据初探
- 数据荡涤与预处理
- 业务剖析与数据挖掘
- 数据分析工具地图
- 统计与数据科学计算工具库 Numpy 介绍
- Numpy 与 1 维数组操作
- Numpy 与 2 维数组操作
- Numpy 与高维数组操作
- 数据分析工具库 Pandas 介绍
- 图解 Pandas 外围操作函数大全
- 图解 Pandas 数据变换高级函数
- Pandas 数据分组与操作
- 数据可视化准则与办法
- 基于 Pandas 的数据可视化
- seaborn 工具与数据可视化
ShowMeAI 系列教程举荐
- 图解 Python 编程:从入门到精通系列教程
- 图解数据分析:从入门到精通系列教程
- 图解 AI 数学根底:从入门到精通系列教程
- 图解大数据技术:从入门到精通系列教程