当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Python Pandas DataFrame apply方法用法及代码示例


Pandas DataFrame.apply(~) 将指定的函数应用于 DataFrame 的每一行或每一列。

参数

1. func | function

沿行或列应用的函数。

2. axis | stringint | optional

执行该函数所沿的轴:

说明

0"index"

函数将应用于每一列。

1"columns"

函数将应用于每一行。

默认情况下,axis=0

3. raw | boolean | optional

  • 如果 True ,则 NumPy 数组将作为 func 的参数传递。

  • 如果 False ,则将传递一个系列。

Performance-wise,如果您要应用还原 Numpy 函数,例如 np.sum ,则选择 raw=True 。默认情况下,raw=False

4. result_type | stringNone | optional

如何解析 func 的 list-like 返回值。这仅在 axis=1 时相关(当 func 逐行应用时):

说明

"expand"

list-like 结果的值(例如 [1,2,3] )将放置在单独的列中。

"reduce"

list-like 结果的值将减少为单个系列。

"broadcast"

list-like 结果的值将被分成列,但与 "expand" 不同,列名称将被保留

None

行为取决于函数返回的值。如果返回list-like,那么它将被放置在一个Series中。如果返回Series,则其值将放置在单独的列中。

默认情况下,result_type=None 。请参阅下面的示例以进行说明。

5. args | tuple | optional

您想要提供给 func 的其他位置参数。

6. **kwds | optional

您想要提供给 func 的其他关键字参数。

返回值

应用函数后生成的SeriesDataFrame

例子

在列上应用函数

考虑以下 DataFrame :

df = pd.DataFrame({"A":[2,3], "B":[4,5]})
df



   A  B
0  2  4
1  3  5

要按列应用 np.sum 函数:

df.apply(np.sum)   # axis=0



A  5
B  9
dtype: int64
注意

如果您在应用 NumPy 还原函数(如 np.sum )时设置 raw=True ,Pandas 可以从性能提升中受益。

在行上应用函数

考虑与之前相同的DataFrame:

df = pd.DataFrame({"A":[2,3], "B":[4,5]})
df



   A  B
0  2  4
1  3  5

要按行应用 np.sum 函数,请设置 axis=1

df.apply(np.sum, axis=1)   # Returns a Series



0  6
1  8
dtype: int64

应用内置捆绑器

考虑与之前相同的DataFrame:

df = pd.DataFrame({"A":[2,3], "B":[4,5]})
df



   A  B
0  2  4
1  3  5

您可以使用内置函数(例如 tuplelist 甚至 Series )捆绑值:

df.apply(tuple)



A    (2, 3)
B    (4, 5)
dtype: object

应用自定义函数

考虑与之前相同的DataFrame:

df = pd.DataFrame({"A":[2,3], "B":[4,5]})
df



   A  B
0  2  4
1  3  5

应用自定义函数:

def foo(col):
 return 2 * col
df.apply(foo)



   A  B
0  4  8
1  6  10

我们的函数 foo 接受 Series 类型的列 ( axis=0 ) 作为参数,并将转换后的列作为 Series 返回。

传入关键字参数

要将关键字参数传递给 func

def foo(col, x):
 return x * col
df.apply(foo, x=2)



   A  B
0  4  8
1  6  10

解析list-like返回值的不同方式

考虑以下 DataFrame :

df = pd.DataFrame({"A":[4,5], "B":[6,7]}, index=["a","b"])
df



   A  B
a  4  6
b  5  7

当函数的返回类型为 list-like 时,参数 result_type 起作用。

返回类型 无

return_type 未设置时,默认行为是将 list-like 返回值放在 Series 中:

df.apply(lambda x: [1,2,3], axis=1)   # Returns a Series



a [1, 2, 3]
b [1, 2, 3]
dtype: object

请注意,lambda x: [1,2,3] 相当于以下内容:

def foo(x):         # The function name isn't important here
 return [1,2,3]
返回类型 展开

return_type="expand" 时,list-like 的值将被分成列,从而产生 DataFrame

df.apply(lambda x: [1,2,3], axis=1, result_type="expand")    # Returns a DataFrame



   0  1  2
a  1  2  3
b  1  2  3

请注意,我们不再拥有原始列名称 AB

返回类型广播

return_type="broadcast" 时,list-like 值将被分成列,但与 "expand" 不同,列名称将被保留:

df.apply(lambda x: [1,2], axis=1, result_type="broadcast")     # Returns a DataFrame



   A  B
a  1  2
b  1  2

为此,list-like 的长度必须等于源 DataFrame 中的列数。这意味着在这种情况下返回 [1,2,3] 而不是 [1,2] 将导致错误。

相关用法


注:本文由纯净天空筛选整理自Isshin Inada大神的英文原创作品 Pandas DataFrame | apply method。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。