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