pandas apply、applymap、map和transform

在日常的数据处理中,经常会对一个DataFrame进行逐行、逐列和逐元素的操作,对应这些操作,Pandas中的mapapplyapplymap可以解决绝大部分这样的数据处理需求。

一,apply

apply是指沿着DataFrame的轴(axis)调用一个函数:

DataFrame.apply(func, axis=0, raw=False, result_type=None, args=(), **kwargs)
Series.apply(funcconvert_dtype=Trueargs=()**kwargs)

参数axis:axis=0或axis=‘index’,表示对每一列都应用函数;axis=1或axis=‘column’,表示对每一行都应用函数

 

举个例子,有如下的数据集:

df = pd.DataFrame([[4, 9]] * 3, columns=['A', 'B'])
df
   A  B
0  4  9
1  4  9
2  4  9

沿着索引,就是计算每一列的累加和:

df.apply(np.sum, axis=0)
A    12
B    27
dtype: int64

沿着列,就是计算每一行的累加和:

df.apply(np.sum, axis=1)
0    13
1    13
2    13
dtype: int64

二,applymap

applymap()函数对每个元素应用一个函数:

DataFrame.applymap(func)

定义一个函数foo,使用applymap()函数把函数foo应用于DataFrame对象的各个元素上,

foo=lambda x: '%.2f' % x
df.applymap(foo)

三,map

map是Series的一个方法,用于对序列的每一元素执行一个映射,把一个值转换为另一个值。

Series.map(arg, na_action=None)

举个例子,把序列中的文本按照特定的格式替换为新的文本:

s = pd.Series(['cat', 'dog', np.nan, 'rabbit'])
s
0      cat
1      dog
2      NaN
3   rabbit
dtype: object

s.map('I like a {}'.format, na_action='ignore')
0     I am a cat
1     I am a dog
2            NaN
3  I am a rabbit
dtype: object

四,transform

转换数据,调用函数对数据元素进行处理:

DataFrame.transform(func, axis=0, *args, **kwargs)
Series.transform(funcaxis=0*args**kwargs)

参数*args 和 **kwargs 都是传递给func的参数:

df = pd.DataFrame({'A': range(3), 'B': range(1, 4)})
df
   A  B
0  0  1
1  1  2
2  2  3
df.transform(lambda x: x + 1)
   A  B
0  1  2
1  2  3
2  3  4

 

 

参考文档:

pandas DataFrame

posted @ 2019-10-08 13:43  悦光阴  阅读(3866)  评论(0编辑  收藏  举报