pandas.DataFrame.apply()
是 Pandas 库中的一个用于 DataFrame 类型数据的方法,它可以作用于整个 DataFrame 或某个指定的轴(行或列),并将特定的函数应用到该轴上的各个元素之上,它会返回一个由各行或各列运用函数后的新的 DataFrame 对象。
具体而言,函数通常接受一个 Series 类型的数据作为参数,并针对这个 Series 进行处理。在 DataFrame 中,此操作的作用对象可以是行或列。该函数接受以下参数:
- func:需要处理 Series 数据的函数,可以是函数名、lambda 表达式或 list/set 类型的聚合函数;
- axis:表示处理的轴,0 表示处理列,1 表示处理行;
- raw:默认为 False,表示在函数中传入的是数据帧的每个元素。当 raw=True 时,表示在函数中传入一行或一列的数据;
- result_type:表示返回数据的类型,默认为 “expand”,表示返回包含列索引的 DataFrame;或者 “reduce”,表示返回只有一列的 Series;
- args, kwargs:表示传入到 func 中的其他参数和关键字参数;
以下是通过两个实例来详细讲解pandas.DataFrame.apply()
的使用方法和作用:
示例一:
假设现在有一个餐厅的销售记录表格,我们想要计算每个员工的销售总额。表格如下:
销售员工 | 销售额(元) | 日期 |
---|---|---|
Tom | 1300 | 2021-08-01 |
Tom | 800 | 2021-08-02 |
Tom | 1000 | 2021-08-03 |
Jim | 900 | 2021-08-01 |
Jim | 1200 | 2021-08-02 |
Jim | 600 | 2021-08-03 |
我们可以使用apply()
方法对每个员工的销售额进行求和,代码如下:
import pandas as pd
# 读取 CSV 文件
df = pd.read_csv('sales.csv')
# 定义求和函数
def sum_sales(series):
return series.sum()
# 按照销售员工分组并计算销售额之和
sales_sum = df.groupby(by="销售员工")["销售额(元)"].apply(sum_sales)
print(sales_sum)
运行上述代码后,我们将得到每个员工的销售总额:
销售员工
Jim 2700
Tom 3100
Name: 销售额(元), dtype: int64
可以看到该方法可以将每个组内的关键信息提取出来并计算总和。
示例二:
现在有一个 DataFrame 数据,每个元素都是一个列表或元组。我们需要将这些列表或元组中的元素进行平坦化,并且去除重复元素,输出一个新的 DataFrame 数据。数据如下:
数据 |
---|
[1,2,2,3] |
[2,3,4] |
[3,4,5,6] |
我们可以使用apply()
方法以及 set() 函数来实现,去掉列表中的重复元素,代码如下:
import pandas as pd
# 创建 DataFrame
df = pd.DataFrame({'数据': [[1,2,2,3], [2,3,4], [3,4,5,6]]})
# 定义函数
def func(x):
return pd.Series(list(set(x)))
# 应用函数
result = df['数据'].apply(func)
print(result)
运行上述代码后,我们将得到去重后的新 DataFrame 数据:
0 1 2 3
0 1 2 3 NaN
1 2 3 4 NaN
2 3 4 5 6
可以看到该方法可以将 DataFrame 数据的每个元素进行函数处理后,将结果注入到新的 DataFrame 数据中。
综上,pandas.DataFrame.apply()
能够对 DataFrame 数据中的元素进行函数式处理,并将处理后的结果存入到新的 DataFrame 对象中。