Python Pandas - 函式應用



Pandas 提供了強大的方法來將自定義函式或庫函式應用於 DataFrame 和 Series 物件。根據您是想將函式應用於整個 DataFrame、按行或按列,還是按元素應用,Pandas 提供了幾種方法來實現這些任務。

在本教程中,我們將探討 Pandas 中三種基本的函式應用方法:

  • 表級函式應用:pipe()
  • 行或列級函式應用:apply()
  • 元素級函式應用:map()

讓我們深入瞭解每種方法,看看如何有效地利用它們。

表級函式應用

pipe() 函式允許您應用可連結的函式,這些函式期望 DataFrame 或 Series 作為輸入。此方法對於以清晰易讀的方式對整個 DataFrame 執行自定義操作非常有用。

示例:將自定義函式應用於整個 DataFrame

以下示例演示瞭如何使用 pipe() 函式向 DataFrame 中的所有元素新增值。

import pandas as pd
import numpy as np

def adder(ele1,ele2):
   return ele1+ele2

df = pd.DataFrame(np.random.randn(5,3),columns=['col1','col2','col3'])
print('Original DataFrame:\n', df)

df.pipe(adder,2)
print('Modified DataFrame:\n', df)

輸出如下:

Original DataFrame:
        col1      col2      col3
0  2.349190  1.908931 -0.121444
1  1.306488 -0.946431  0.308926
2 -0.235694 -0.720602  1.089614
3  0.960508 -1.273928  0.943044
4 -1.180202 -0.959529  0.464541

Modified DataFrame:
        col1      col2      col3
0  2.349190  1.908931 -0.121444
1  1.306488 -0.946431  0.308926
2 -0.235694 -0.720602  1.089614
3  0.960508 -1.273928  0.943044
4 -1.180202 -0.959529  0.464541

行或列級函式應用

apply() 函式非常通用,允許您沿 DataFrame 的軸應用函式。預設情況下,它按列應用函式,但您可以使用 axis 引數指定按行應用。

示例:按列應用函式

此示例將函式應用於 DataFrame 列。這裡 np.mean() 函式計算每一列的平均值。

import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.randn(5, 3), columns=['col1', 'col2', 'col3'])
print('Original DataFrame:\n', df)

result = df.apply(np.mean)
print('Result:\n',result)

輸出如下:

Original DataFrame:
        col1      col2      col3
0 -0.024666  0.058480  0.658520
1 -0.040997  1.253245 -1.242394
2  1.073832 -1.039897  0.840698
3  0.248157 -1.985475  0.310767
4 -0.973393 -1.002330 -0.890125

Result:
 col1    0.056587
col2   -0.543195
col3   -0.064507
dtype: float64

透過將值 1 傳遞給 axis 引數,可以按行執行操作。

示例:按行應用函式

此函式將 np.mean() 函式應用於 pandas DataFrame 的行。

import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.randn(5, 3), columns=['col1', 'col2', 'col3'])
print('Original DataFrame:\n', df)

result = df.apply(np.mean, axis=1)
print('Result:\n',result)

輸出如下:

Original DataFrame:
        col1      col2      col3
0  0.069495 -1.228534 -1.431796
1  0.468724  0.497217 -0.270103
2 -0.754304  0.053360 -1.298396
3  0.762669 -2.181029 -2.067756
4  0.129679  0.131104  1.010851

Result:
 0   -0.863612
1    0.231946
2   -0.666446
3   -1.162039
4    0.423878
dtype: float64  

示例:應用 Lambda 函式

以下示例使用 apply() 方法將 lambda 函式應用於 DataFrame 元素。

import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.randn(5, 3), columns=['col1', 'col2', 'col3'])
print('Original DataFrame:\n', df)

result = df.apply(lambda x: x.max() - x.min())
print('Result:\n',result)

輸出如下:

Original DataFrame:
        col1      col2      col3
0 -1.143522  0.413272  0.633881
1  0.200806 -0.050024  0.108580
2 -2.147704 -0.400682 -1.191469
3  2.342222 -2.398639  0.063151
4 -1.071437  1.895879 -0.916805

Result:
 col1    4.489926
col2    4.294518
col3    1.825350
dtype: float64

元素級函式應用

當您需要將函式分別應用於每個元素時,可以使用 map() 函式。當函式無法向量化時,這些方法特別有用。

示例:使用 map() 函式

以下示例演示瞭如何使用 map() 函式將自定義函式應用於 DataFrame 物件的元素。

import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.randn(5,3),columns=['col1','col2','col3'])

# My custom function
df['col1'].map(lambda x:x*100)
print(df.apply(np.mean))

輸出如下:

col1    0.480742
col2    0.454185
col3    0.266563
dtype: float64
廣告