文章目录
- 前言
- 一、Series数据处理
- 1、map()方法
- 2、apply()方法
- 3、applymap()方法
- 总结
- 二、DataFrame数据处理
- 1、map()方法
- 2、apply()方法
- 3、applymap()方法
- 总结
- 三、map、apply、applymap三个函数区别
前言
在进行数据处理时,经常会对一个DataFrame展开逐行、逐列、逐元素的操作,对应这些操作,常常使用Pandas中的map、apply和applymap三个函数进行处理。本文主要讲这三个函数在series、dataframe数据结构下应用情况及三个函数的区别。
模拟的样本数据
boolean=[True,False]
channel=["T","N"]
data=pd.DataFrame({
"A":np.random.randint(150,190,10),
"B":np.random.randint(40,90,10),
"C":[boolean[x] for x in np.random.randint(0,2,10)],
"D":[channel[x] for x in np.random.randint(0,2,10)]
}
)
data
一、Series数据处理
1、map()方法
- 使用字典进行映射
举例:
要求:将D列中”N“换为0,”T“为1。
data['D']=data['D'].map({'N':0,'T':1})
data
- 使用函数
举例:
要求:将D列中”N“换为0,”T“为1。
def func(values):
if values=='N':
return 0
else:
return 1
data['D']=data['D'].map(func)
data
不管是利用字典还是函数进行映射,map方法都是把对应的数据逐个当作参数传入到字典或函数中,得到映射后的值。
2、apply()方法
- 使用函数做映射
举例:
要求:将D列中”N“换为0,”T“为1。
def func(values):
if values=='N':
return 0
else:
return 1
data['D']=data['D'].apply(func)
data
- apply可以输入额外的参数
可以给apply调用函数添加多个参数,在apply里加上args=,将其他参数组成一个元组代入函数中。注意:只有一个额外参数时需要写成这种形式:(‘额外参数1’,),加一个’,',代表是一个元组。
举例:
要求:将A列中所有数值减去100。
def func(values,x):
return values+x
data['A']=data['A'].apply(func,args=(-100,))
data
- 不可以用字典来做映射
举例:
要求:将D列中”N“换为0,”T“为1。
data['D']=data['D'].apply({'N':0,'T':1})
data
3、applymap()方法
- series没有applymap函数。
总结
- Series的map可以直接输入字典做关系映射,apply不行。
- Series的apply可以输入函数之外的额外参数,map不行。
- Series的apply和map都可以输入函数做数据处理。
- Series没有applymap函数。
- Series的apply是不能直接输入字典做关系映射,不是不能输入字典。
二、DataFrame数据处理
1、map()方法
- DataFrame中没有map()方法
2、apply()方法
- 对比Series的apply,DataFrame的apply多了一个核心参数axis:
当axis=1时,对每行执行指定函数。
当axis=0时,对每列执行指定函数。
举例1
要求:对比A、B两列,求每行最大值
import numpy as np
data[['A','B']].apply(np.max,axis=1)
举例2
要求:求A、B两列的最大值
import numpy as np
data[['A','B']].apply(np.max,axis=0)
3、applymap()方法
- applymap会对DataFrame中每个单元格执行指定函数的操作
举例:
要求:将dataframe中所有的值保留两位小数显示,使用applymap可以很快达到你想要的目的
import pandas as pd
data = 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),
}
)
data
data .applymap(lambda x:"%.2f" % x)
总结
- DataFrame没有map函数。
- DataFrame的apply是对行(可以单行也可以多行)或列(可以单列也可以多列)执行指定函数的操作,有axis参数,当axis=1,对每行执行指定函数,当axIs=0时,对每列执行指定函数。
- DataFrame中applymap会对每个单元格执行指定函数的操作。
三、map、apply、applymap三个函数区别
-
map:应用在单独一个Series的每个元素中,只针对单列。
-
apply:应用在DataFrame的行或列中,也可以应用到单独一个Series的每个元素中,针对多列,也可以单列。
-
applymap:应用在DataFrame的每个元素中。针对DataFrame全部元素。apply想要直接对每个元素进行操作,得单独取出serires才可以实现,不能直接在整个DataFrame上执行。
参考文章:
https://zhuanlan.zhihu.com/p/100064394
https://zhuanlan.zhihu.com/p/133722455
https://zhuanlan.zhihu.com/p/584036056