pandas.DataFrame.pipe#

DataFrame.pipe(func, *args, **kwargs)[source]#

应用期望 Series 或 DataFrame 的链式函数。

参数:
func函数

要应用于 Series/DataFrame 的函数。 argskwargs 会被传递给 func。或者,可以使用 (callable, data_keyword) 元组,其中 data_keyword 是一个字符串,指示 callable 中期望 Series/DataFrame 的那个关键字参数的名称。

*args可迭代对象, 可选

传递给 `func` 的位置参数。

**kwargs映射, 可选

传递给 `func` 的关键字参数字典。

返回:
func 的返回类型。

func 应用于 Series 或 DataFrame 的结果。

另请参阅

DataFrame.apply

沿 DataFrame 输入轴应用函数。

DataFrame.map

对整个 DataFrame 进行逐元素应用函数。

Series.map

Series 应用映射对应关系。

注意

当需要链接期望 Series、DataFrame 或 GroupBy 对象的函数时,请使用 .pipe

示例

从字典构建收入 DataFrame。

>>> data = [[8000, 1000], [9500, np.nan], [5000, 2000]]
>>> df = pd.DataFrame(data, columns=["Salary", "Others"])
>>> df
   Salary  Others
0    8000  1000.0
1    9500     NaN
2    5000  2000.0

对收入 DataFrame 执行减税的函数。

>>> def subtract_federal_tax(df):
...     return df * 0.9
>>> def subtract_state_tax(df, rate):
...     return df * (1 - rate)
>>> def subtract_national_insurance(df, rate, rate_increase):
...     new_rate = rate + rate_increase
...     return df * (1 - new_rate)

而不是这样写

>>> subtract_national_insurance(
...     subtract_state_tax(subtract_federal_tax(df), rate=0.12),
...     rate=0.05,
...     rate_increase=0.02,
... )

你可以写成

>>> (
...     df.pipe(subtract_federal_tax)
...     .pipe(subtract_state_tax, rate=0.12)
...     .pipe(subtract_national_insurance, rate=0.05, rate_increase=0.02)
... )
    Salary   Others
0  5892.48   736.56
1  6997.32      NaN
2  3682.80  1473.12

如果您的函数将数据作为(例如)第二个参数,请传递一个元组来指示哪个关键字参数期望数据。例如,假设 national_insurance 在第二个参数中以 df 形式接收其数据

>>> def subtract_national_insurance(rate, df, rate_increase):
...     new_rate = rate + rate_increase
...     return df * (1 - new_rate)
>>> (
...     df.pipe(subtract_federal_tax)
...     .pipe(subtract_state_tax, rate=0.12)
...     .pipe(
...         (subtract_national_insurance, "df"), rate=0.05, rate_increase=0.02
...     )
... )
    Salary   Others
0  5892.48   736.56
1  6997.32      NaN
2  3682.80  1473.12