📜  Pandas apply()(1)

📅  最后修改于: 2023-12-03 15:03:28.087000             🧑  作者: Mango

Pandas Apply()

Pandas 是一种流行的数据分析工具,是基于 NumPy 库构建的。它提供了许多功能,其中之一就是 apply() 函数。本文将为您介绍 apply() 在 Pandas 中的用法和示例代码。

什么是 pandas apply() 函数?

Pandas apply() 函数用于在 Pandas DataFrame 或 Series 的行或列上应用指定的函数。可以使用 apply() 的输入参数选择要应用操作的行或列。应用的函数可以是预定义的,也可以是用户自己定义的。

语法

apply() 函数的语法如下:

DataFrame.apply(func, axis=0, raw=False, result_type=None, args=(), **kwds)

Series.apply(func, axis=0, raw=False, result_type=None, args=(), **kwds)

参数说明:

  • func:需要应用的函数名称或函数对象
  • axis:函数应用的轴的方向。0 表示应用到每一列,1 表示应用到每一行。默认为 0。
  • raw:如果为 True,则 apply 函数会将每一行或列作为 1-D 数组传递给函数。如果为 False(默认值),则传递每一行或列的 Series。
  • result_type:输出结果的数据类型。可以是None、‘expand’和‘reduce’,默认为None。
  • args:传递给函数的其他参数,以元组的形式提供。
  • kwds:传递给函数的其他关键字参数。
示例

下面是一些在 Pandas 中使用 apply() 函数的示例。

示例 1

在下面的示例中,我们将创建一个包含学生分数的 DataFrame,然后用 apply() 函数计算每个学生的平均分数和班级的平均分数。

import pandas as pd

data = {'Name':['Tom', 'Jack', 'Steve', 'Ricky'],
        'Physics':[78, 62, 80, 68],
        'Chemistry':[80, 70, 90, 78],
        'Mathematics':[85, 76, 89, 76]}
df = pd.DataFrame(data)

# 计算每个学生的平均分数
df['Average'] = df.apply(lambda x: (x['Physics']+x['Chemistry']+x['Mathematics'])/3, axis=1)

# 计算班级的平均分数
df.loc['Class Average'] = df[['Physics', 'Chemistry', 'Mathematics']].apply(lambda x: x.mean())
print(df)

输出:

              Name  Physics  Chemistry  Mathematics    Average
0              Tom       78         80           85  81.000000
1             Jack       62         70           76  69.333333
2            Steve       80         90           89  86.333333
3            Ricky       68         78           76  74.000000
Class Average   NaN       72.0       79.5     81.5      NaN

在此示例中,使用了 apply() 函数来计算每个学生的平均分数和班级的平均分数。

示例 2

在下面的示例中,我们将创建一个包含字典的列表,然后使用 apply() 函数将其中一个字典中的每个值除以 2。

import pandas as pd

data = [
    {'Name': 'Tom', 'Age': 20, 'Salary': 50000},
    {'Name': 'Jack', 'Age': 25, 'Salary': 60000},
    {'Name': 'Steve', 'Age': 21, 'Salary': 55000},
    {'Name': 'Ricky', 'Age': 22, 'Salary': 45000}
]
df = pd.DataFrame(data)

# 将 'Salary' 列中的每个值除以 2
df['Salary'] = df['Salary'].apply(lambda x: x/2)
print(df)

输出:

   Name  Age  Salary
0   Tom   20   25000
1  Jack   25   30000
2 Steve   21   27500
3 Ricky   22   22500

在此示例中,我们使用 apply() 函数将 'Salary' 列中的每个值除以 2。

示例 3

在下面的示例中,我们将创建一个包含两列数据(A 和 B)的 DataFrame,然后使用 apply() 函数将每行中的最大值和最小值相加

import pandas as pd

data = {'A': [1, 2, 3, 4], 'B': [5, 6, 7, 8]}
df = pd.DataFrame(data)

# 将每行中的最大值和最小值相加
df['Max_Min_Sum'] = df.apply(lambda x: x.max() + x.min(), axis=1)
print(df)

输出:

   A  B  Max_Min_Sum
0  1  5            6
1  2  6            8
2  3  7           10
3  4  8           12

在此示例中,我们使用 apply() 函数将每行中的最大值和最小值相加,然后将结果放入新的列 'Max_Min_Sum' 中。

示例 4

在下面的示例中,我们将创建一个包含两列数据(A 和 B)的 DataFrame,然后使用 apply() 函数将每行中的值转为相应的字符串。

import pandas as pd

data = {'A': [1, 2, 3, 4], 'B': [5, 6, 7, 8]}
df = pd.DataFrame(data)

# 将每行中的值转为相应的字符串
df = df.applymap(lambda x: str(x))
print(df)

输出:

   A  B
0  1  5
1  2  6
2  3  7
3  4  8

在此示例中,我们使用 applymap() 函数将每行中的值转为相应的字符串。

示例 5

在下面的示例中,我们将创建一个包含三列数据(A、B 和 C)的 DataFrame,然后使用 apply() 函数将每行中符合条件的列名相加。

import pandas as pd

data = {'A': [1, 2, 3, 4], 'B': [5, 6, 7, 8], 'C': [9, 10, 11, 12]}
df = pd.DataFrame(data)

# 将每行中符合条件的列名相加
df['Result'] = df.apply(lambda x: x.sum(axis=0) if x['A']<3 else x.mean(axis=0), axis=1)
print(df)

输出:

   A  B   C  Result
0  1  5   9     15
1  2  6  10     18
2  3  7  11   7.000
3  4  8  12   8.000

在此示例中,我们使用 apply() 函数将每行中符合条件的列名相加,然后将结果放入新的列 'Result' 中。

结论

Pandas apply() 函数可用于处理各种数据分析任务,如计算列或行中的统计数据,将值转换为相应类型的字符串等,能够更方便地实现自定义函数对数据的处理。