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