pandas apply、applymap、map和transform
在日常的数据处理中,经常会对一个DataFrame
进行逐行、逐列和逐元素的操作,对应这些操作,Pandas中的map
、apply
和applymap
可以解决绝大部分这样的数据处理需求。
一,apply
apply是指沿着DataFrame的轴(axis)调用一个函数:
DataFrame.apply(func, axis=0, raw=False, result_type=None, args=(), **kwargs)
Series.apply(func, convert_dtype=True, args=(), **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(func, axis=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
参考文档:
作者:悦光阴
本文版权归作者和博客园所有,欢迎转载,但未经作者同意,必须保留此段声明,且在文章页面醒目位置显示原文连接,否则保留追究法律责任的权利。