Pandas DataFrame apply()示例

时间:2020-02-23 14:42:06  来源:igfitidea点击:

Pandas DataFrame apply()函数用于沿DataFrame的轴应用函数。
函数语法为:

def apply(
  self,
  func,
  axis=0,
  broadcast=None,
  raw=False,
  reduce=None,
  result_type=None,
  args=(),
  **kwds
)

重要参数是:

  • func:应用于DataFrame的每一行或者每一列的函数。

  • axis:沿其应用功能的轴。
    可能的值为{0或者'index',1或者'columns'},默认值为0。

  • args:传递给函数的位置参数。
    当我们必须将其他参数传递给函数时,这很有用。

  • kwargs:传递给函数的其他关键字参数。
    当我们必须将其他关键字参数传递给函数时,这将很有帮助。

Pandas DataFrame apply()示例

我们来看一些在DataFrame对象上使用apply()函数的示例。

1.将函数应用于DataFrame元素

import pandas as pd

df = pd.DataFrame({'A': [1, 2], 'B': [10, 20]})

def square(x):
  return x * x

df1 = df.apply(square)

print(df)
print(df1)

输出:

A   B
0  1  10
1  2  20

 A    B
0  1  100
1  4  400

调用apply()函数的DataFrame保持不变。
apply()函数将函数应用于其元素后,将返回一个新的DataFrame对象。

2.与lambda一起套用

如果您看上面的示例,我们的square()函数非常简单。
我们可以轻松地将其转换为lambda函数。
我们可以在调用apply()函数的同时创建一个lambda函数。

df1 = df.apply(lambda x: x * x)

输出将与上一个示例相同。

3.沿轴套用

我们可以沿轴应用一个函数。
但是,在最后一个示例中,没有使用轴。
该功能将应用于DataFrame的所有元素。

当我们在DataFrame的行或者列上调用聚合函数时,可以清楚地使用轴。
假设我们要获取沿列或者索引的元素总数。
根据axis参数的值,输出将有所不同。

import pandas as pd
import numpy as np

df = pd.DataFrame({'A': [1, 2], 'B': [10, 20]})

df1 = df.apply(np.sum, axis=0)
print(df1)

df1 = df.apply(np.sum, axis=1)
print(df1)

输出:

A     3
B    30
dtype: int64

0    11
1    22
dtype: int64

在第一个示例中,计算沿列的元素总数。
而在第二个示例中,计算沿行的元素之和。

4. DataFrame apply()与参数

假设我们要应用一个接受多个参数的函数。
在这种情况下,我们可以使用" args"参数传递其他参数。

import pandas as pd

def sum(x, y, z):
  return x + y + z

df = pd.DataFrame({'A': [1, 2], 'B': [10, 20]})

df1 = df.apply(sum, args=(1, 2))
print(df1)

输出:

A   B
0  4  13
1  5  23

5.带有位置和关键字参数的DataFrame apply()

让我们看一个示例,在该示例中,我们将同时使用" args"和" kwargs"参数来将位置参数和关键字参数传递给函数。

import pandas as pd

def sum(x, y, z, m):
  return (x + y + z) * m

df = pd.DataFrame({'A': [1, 2], 'B': [10, 20]})

df1 = df.apply(sum, args=(1, 2), m=10)
print(df1)

输出:

A    B
0  40  130
1  50  230

DataFrame applymap()函数

如果要按元素应用函数,则可以使用applymap()函数。
此函数没有其他参数。
该函数应用于每个元素,并且返回值用于创建结果DataFrame对象。

import pandas as pd
import math

df = pd.DataFrame({'A': [1, 4], 'B': [100, 400]})
df1 = df.applymap(math.sqrt)

print(df)
print(df1)

输出:

A    B
0  1  100
1  4  400
   A     B
0  1.0  10.0
1  2.0  20.0

让我们看另一个示例,我们将使用applymap()函数将所有元素值转换为大写。

import pandas as pd

df = pd.DataFrame({'Name': ['hyman', 'Meghna'], 'Role': ['ceo', 'cto']})

df1 = df.applymap(str.upper)

print(df)
print(df1)

输出:

Name Role
0  hyman  ceo
1  Meghna  cto

   Name Role
0  hyman  CEO
1  MEGHNA  CTO