作者:韩信子@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数学根底:从入门到精通系列教程
- 图解大数据技术:从入门到精通系列教程
发表回复