Pandas中map(),applymap(),apply()函数如何使用

其他教程   发布日期:2023年06月27日   浏览次数:512

本文小编为大家详细介绍“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

  1. import pandas as pd
  2. import numpy as np
  3. df = pd.read_csv('./data/06/sample_header.csv')
  4. print(df)
  5. # a b c d
  6. # 0 11 12 13 14
  7. # 1 21 22 23 24
  8. # 2 31 32 33 34

指定pandas对象作为NumPy函数的参数

可以将Pandas对象指定为NumPy函数的参数。

元素的应用

NumPy的通用函数(ufunc:应用于数组元素的函数)适用于pandas对象的每个元素。

绝对值(fabs()),平方根(sqrt()),log(log())等。

  1. print(np.sqrt(df))
  2. # a b c d
  3. # 0 3.316625 3.464102 3.605551 3.741657
  4. # 1 4.582576 4.690416 4.795832 4.898979
  5. # 2 5.567764 5.656854 5.744563 5.830952

行/列的应用

如果将pandas对象指定为从NumPy数组的所有元素计算值的函数的参数,则默认情况下它将应用于pandas对象的每列。如果参数轴= 1,则将其应用于每行。

最大值(amax()),最小值(amin()),平均值(mean())等。

  1. print(np.amax(df))
  2. # a 31
  3. # b 32
  4. # c 33
  5. # d 34
  6. # dtype: int64
  7. print(np.mean(df, axis=1))
  8. # 0 12.5
  9. # 1 22.5
  10. # 2 32.5
  11. # dtype: float64

pandas.DataFrame,pandas.Series方法

最大值,最小值,平均值,方差等也被准备为Pandas对象的方法,因此也可以直接使用它们。

同样,在这种情况下,默认情况下也会将其应用于每一列,并且如果参数axis = 1,则会将其应用于每一行。

  1. print(df.max())
  2. # a 31
  3. # b 32
  4. # c 33
  5. # d 34
  6. # dtype: int64
  7. print(df.max(axis=1))
  8. # 0 14
  9. # 1 24
  10. # 2 34
  11. # dtype: int64

Pandas对象方法的函数应用

可以使用pandas对象方法将函数应用于元素,行和列。您可以应用Python内置函数或您定义的函数。

  • 应用于Series的每个元素:map(),apply()

  • 应用于DataFrame的每个元素:applymap()

  • 应用于DataFrame的每行和每列:apply()

  • 应用于DataFrame的特定行/列元素

以上方法都返回一个新的已处理的对象,而原始对象则保持不变。没有像dropna()或fillna()那样的参数,因此,如果想更改原始对象本身时,

  1. df = df.applymap(function)

如上,用原始对象替换新对象并覆盖它。

适用于Series的每个元素:map(),apply()

将Python内置函数,匿名函数(lambda)或def定义的函数传递给map()或apply()的参数。

  1. s = df['a']
  2. print(s)
  3. # 0 11
  4. # 1 21
  5. # 2 31
  6. # Name: a, dtype: int64
  7. f_brackets = lambda x: '[{}]'.format(x)
  8. print(s.map(f_brackets))
  9. # 0 [11]
  10. # 1 [21]
  11. # 2 [31]
  12. # Name: a, dtype: object
  13. def f_str(x):
  14. return str(x).replace('1', 'One').replace('2', 'Two').replace('3', 'Three').replace('4', 'Four')
  15. print(s.map(f_str))
  16. # 0 OneOne
  17. # 1 TwoOne
  18. # 2 ThreeOne
  19. # Name: a, dtype: object

对于map(),如果将字典dict指定为参数,它将替换为元素。

应用于DataFrame的每个元素:applymap()

将Python的内置函数,匿名函数(lambda)或def定义的函数传递为applymap()的参数。

  1. f_oddeven = lambda x: 'odd' if x % 2 == 1 else 'even'
  2. print(df.applymap(f_oddeven))
  3. # a b c d
  4. # 0 odd even odd even
  5. # 1 odd even odd even
  6. # 2 odd even odd even

应用于DataFrame的每行和每列:apply()

将适用于一维数组的函数传递给apply()的参数。默认情况下,它应用于每列,如果axis = 1,则应用于每行。

  1. f_maxmin = lambda x: max(x) - min(x)
  2. print(df.apply(f_maxmin))
  3. # a 20
  4. # b 20
  5. # c 20
  6. # d 20
  7. # dtype: int64
  8. print(df.apply(f_maxmin, axis=1))
  9. # 0 3
  10. # 1 3
  11. # 2 3
  12. # dtype: int64

应用于DataFrame的特定行/列元素

由于没有方法仅将功能应用于DataFrame的特定行/列元素,可执行以下方法。

  • 选择行/列并应用带有map()或apply()的功能

  • 覆盖原始行/列

  1. df['b'] = df['b'].map(f_str)
  2. print(df)
  3. # a b c d
  4. # 0 11 OneTwo 13 14
  5. # 1 21 TwoTwo 23 24
  6. # 2 31 ThreeTwo 33 34
  7. df.iloc[2] = df.iloc[2].map(f_str)
  8. print(df)
  9. # a b c d
  10. # 0 11 OneTwo 13 14
  11. # 1 21 TwoTwo 23 24
  12. # 2 ThreeOne ThreeTwo ThreeThree ThreeFour

以上就是Pandas中map(),applymap(),apply()函数如何使用的详细内容,更多关于Pandas中map(),applymap(),apply()函数如何使用的资料请关注九品源码其它相关文章!