Pandas DataFrame DataFrame.apply() 函数
-
pandas.DataFrame.apply()
语法 -
示例代码:
DataFrame.apply()
方法 -
示例代码:用
DataFrame.apply()
将函数应用到每一列 -
示例代码:用
DataFrame.apply()
方法将函数应用到每一行 -
示例代码:
DataFrame.apply()
方法,参数为result_type
pandas.DataFrame.apply()
函数将输入函数应用于调用者 Pandas DataFrame
的每一行或每一列元素。
pandas.DataFrame.apply()
语法
DataFrame.apply(func, axis=0, raw=False, result_type=None, args=(), **kwds)
参数
func |
要应用于每一行或每一列的函数 |
axis |
沿着行(axis=0 )或列(axis=1 )来应用函数 |
raw |
布尔类型. 行/列以 Series 对象(raw=False )或 ndarray 对象(raw=True )形式传递的行/列 |
result_type |
{expand , reduce , broadcast , None } 操作输出的类型只适用于 axis=1 (列)在 0.23.0 版本中新增 |
args |
func 函数的位置参数 |
**kwds |
函数 func 的关键字参数 |
返回值
它沿着指定的轴应用输入函数后返回 DataFrame
。
示例代码:DataFrame.apply()
方法
import pandas as pd
df = pd.DataFrame({'X': [1, 2, 3,],
'Y': [4, 1, 8]})
print(df)
modified_df=df.apply(lambda x: x**2)
print(modified_df)
输出:
X Y
0 1 4
1 2 1
2 3 8
X Y
0 1 16
1 4 1
2 9 64
我们使用 DataFrame.apply()
方法将一个 lambda
函数 lambda x: x**2
应用到 DataFrame
的所有元素。
Lambda 函数是 Python 中比较简单的函数定义方式。
lambda x: x**2
表示将 x
作为输入并返回 x**2
作为输出的函数。
示例代码:用 DataFrame.apply()
将函数应用到每一列
import pandas as pd
import numpy as np
df = pd.DataFrame({'X': [1, 2, 3,],
'Y': [4, 1, 8]})
print("Original DataFrame")
print(df)
modified_df=df.apply(np.sum)
print("Modified DataFrame")
print(modified_df)
输出:
Original DataFrame
X Y
0 1 4
1 2 1
2 3 8
Modified DataFrame
X 6
Y 13
dtype: int64
这里,np.sum
被应用到每一列,因为在这种情况下 axis=0
(默认值)。
因此,在使用 df.apply()
方法后,我们得到每列中元素的总和。
import pandas as pd
df = pd.DataFrame({'X': [1, 2, 3,],
'Y': [4, 1, 8]})
print(df)
modified_df=df.apply(lambda x: (x**2) if x.name == 'X' else x)
print(modified_df)
输出:
X Y
0 1 4
1 2 1
2 3 8
X Y
0 1 4
1 4 1
2 9 8
如果我们希望只将函数应用于某些列,我们使用 if
语句修改函数定义来过滤列。在本例中,函数只修改了列名为 X
的列的值。
示例代码:用 DataFrame.apply()
方法将函数应用到每一行
import pandas as pd
import numpy as np
df = pd.DataFrame({'X': [1, 2, 3,],
'Y': [4, 1, 8]})
print("Original DataFrame")
print(df)
modified_df=df.apply(np.sum, axis=1)
print("Modified DataFrame")
print(modified_df)
输出:
Original DataFrame
X Y
0 1 4
1 2 1
2 3 8
Modified DataFrame
0 5
1 3
2 11
dtype: int64
这里,np.sum
被应用于到每一行,因为我们设置了 axis=1
。
因此,在使用 df.apply()
方法后,我们得到所有行的单个元素的总和。
import pandas as pd
df = pd.DataFrame({'X': [1, 2, 3,],
'Y': [4, 1, 8]})
print(df)
modified_df=df.apply(lambda x: (x**2) if x.name in [0,1] else x,
axis=1)
print(modified_df)
输出:
X Y
0 1 4
1 2 1
2 3 8
X Y
0 1 16
1 4 1
2 3 8
如果我们希望只将函数应用于某些行,我们使用 if
语句修改函数定义来过滤行。在这个例子中,函数只修改了索引 0
和 1
的行的值,即只修改了第一行和第二行。
示例代码:DataFrame.apply()
方法,参数为 result_type
如果我们使用 result_type
参数的默认值,即 None
,它将不加任何修改地返回 DataFrame
。
import pandas as pd
df = pd.DataFrame({'X': [1, 2, 3,],
'Y': [4, 1, 8]})
print("Original DataFrame")
print(df)
modified_df=df.apply(lambda x:[1,1],axis=1)
print("Modified DataFrame")
print(modified_df)
输出:
Original DataFrame
X Y
0 1 4
1 2 1
2 3 8
Modified DataFrame
0 [1, 1]
1 [1, 1]
2 [1, 1]
dtype: object
在上面的例子中,每一行都被传递到函数中,并且行的值被设置为 [1,1]
。
如果我们想修改函数对 DataFrame
操作后的结果类型,可以根据自己的需要设置 result_type
的值。
import pandas as pd
df = pd.DataFrame({'X': [1, 2, 3,],
'Y': [4, 1, 8]})
print("Original DataFrame")
print(df)
modified_df=df.apply(lambda x:[1,1],
axis=1,
result_type='expand')
print("Modified DataFrame")
print(modified_df)
输出:
Original DataFrame
X Y
0 1 4
1 2 1
2 3 8
Modified DataFrame
0 1
0 1 1
1 1 1
2 1 1
设置 result_type='expand'
将所有列表式的值扩展到 Dataframe 的列中。
Suraj Joshi is a backend software engineer at Matrice.ai.
LinkedIn