Pandas中map(),applymap(),apply()函数如何使用
本文小编为大家详细介绍“Pandas中map(),applymap(),apply()函数如何使用”,内容详细,步骤清晰,细节处理妥当,希望这篇“Pandas中map(),applymap(),apply()函数如何使用”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。
将函数应用于pandas对象(pandas.DataFrame,pandas.Series)时,根据所应用的函数类型以及是否将其应用于元素,行或列,使用的方法会有所不同。
指定pandas对象作为NumPy函数的参数
将Pandas对象指定为函数参数
是否将其应用于元素,行或列取决于函数的类型和参数的设置而有所不同
Pandas对象中的一些方法
Pandas对象方法的函数应用
元素功能(标量值)
适用于Series的每个元素:map(),apply()
应用于DataFrame的每个元素:applymap()
行和列的功能(一维数组)
应用于DataFrame的每行和每列:apply()
用以下csv文件作为示例进行说明。
a,b,c,d
11,12,13,14
21,22,23,24
31,32,33,34
import pandas as pdimport numpy as npdf = pd.read_csv('./data/06/sample_header.csv')print(df)# a b c d# 0 11 12 13 14# 1 21 22 23 24# 2 31 32 33 34
指定pandas对象作为NumPy函数的参数
可以将Pandas对象指定为NumPy函数的参数。
元素的应用
NumPy的通用函数(ufunc:应用于数组元素的函数)适用于pandas对象的每个元素。
绝对值(fabs()),平方根(sqrt()),log(log())等。
print(np.sqrt(df))# a b c d# 0 3.316625 3.464102 3.605551 3.741657# 1 4.582576 4.690416 4.795832 4.898979# 2 5.567764 5.656854 5.744563 5.830952
行/列的应用
如果将pandas对象指定为从NumPy数组的所有元素计算值的函数的参数,则默认情况下它将应用于pandas对象的每列。如果参数轴= 1,则将其应用于每行。
最大值(amax()),最小值(amin()),平均值(mean())等。
print(np.amax(df))# a 31# b 32# c 33# d 34# dtype: int64print(np.mean(df, axis=1))# 0 12.5# 1 22.5# 2 32.5# dtype: float64
pandas.DataFrame,pandas.Series方法
最大值,最小值,平均值,方差等也被准备为Pandas对象的方法,因此也可以直接使用它们。
同样,在这种情况下,默认情况下也会将其应用于每一列,并且如果参数axis = 1,则会将其应用于每一行。
print(df.max())# a 31# b 32# c 33# d 34# dtype: int64print(df.max(axis=1))# 0 14# 1 24# 2 34# dtype: int64
Pandas对象方法的函数应用
可以使用pandas对象方法将函数应用于元素,行和列。您可以应用Python内置函数或您定义的函数。
应用于Series的每个元素:map(),apply()
应用于DataFrame的每个元素:applymap()
应用于DataFrame的每行和每列:apply()
应用于DataFrame的特定行/列元素
以上方法都返回一个新的已处理的对象,而原始对象则保持不变。没有像dropna()或fillna()那样的参数,因此,如果想更改原始对象本身时,
df = df.applymap(function)
如上,用原始对象替换新对象并覆盖它。
适用于Series的每个元素:map(),apply()
将Python内置函数,匿名函数(lambda)或def定义的函数传递给map()或apply()的参数。
s = df['a']print(s)# 0 11# 1 21# 2 31# Name: a, dtype: int64f_brackets = lambda x: '[{}]'.format(x)print(s.map(f_brackets))# 0 [11]# 1 [21]# 2 [31]# Name: a, dtype: objectdef f_str(x): return str(x).replace('1', 'One').replace('2', 'Two').replace('3', 'Three').replace('4', 'Four')print(s.map(f_str))# 0 OneOne# 1 TwoOne# 2 ThreeOne# Name: a, dtype: object
对于map(),如果将字典dict指定为参数,它将替换为元素。
应用于DataFrame的每个元素:applymap()
将Python的内置函数,匿名函数(lambda)或def定义的函数传递为applymap()的参数。
f_oddeven = lambda x: 'odd' if x % 2 == 1 else 'even'print(df.applymap(f_oddeven))# a b c d# 0 odd even odd even# 1 odd even odd even# 2 odd even odd even
应用于DataFrame的每行和每列:apply()
将适用于一维数组的函数传递给apply()的参数。默认情况下,它应用于每列,如果axis = 1,则应用于每行。
f_maxmin = lambda x: max(x) - min(x)print(df.apply(f_maxmin))# a 20# b 20# c 20# d 20# dtype: int64print(df.apply(f_maxmin, axis=1))# 0 3# 1 3# 2 3# dtype: int64
应用于DataFrame的特定行/列元素
由于没有方法仅将功能应用于DataFrame的特定行/列元素,可执行以下方法。
选择行/列并应用带有map()或apply()的功能
覆盖原始行/列
df['b'] = df['b'].map(f_str)print(df)# a b c d# 0 11 OneTwo 13 14# 1 21 TwoTwo 23 24# 2 31 ThreeTwo 33 34df.iloc[2] = df.iloc[2].map(f_str)print(df)# a b c d# 0 11 OneTwo 13 14# 1 21 TwoTwo 23 24# 2 ThreeOne ThreeTwo ThreeThree ThreeFour
读到这里,这篇“Pandas中map(),applymap(),apply()函数如何使用”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注编程网行业资讯频道。
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341