Pandas 使用自定義函數(shù)

2023-05-05 16:27 更新

如果想要應(yīng)用自定義的函數(shù),或者把其他庫中的函數(shù)應(yīng)用到 Pandas 對(duì)象中,有以下三種方法:

  • 1) 操作整個(gè) DataFrame 的函數(shù):pipe()
  • 2) 操作行或者列的函數(shù):apply()
  • 3) 操作單一元素的函數(shù):applymap()

如何從上述函數(shù)中選擇適合的函數(shù),這取決于函數(shù)的操作對(duì)象。下面介紹了三種方法的使用。

操作整個(gè)數(shù)據(jù)表

通過給 pipe() 函數(shù)傳遞一個(gè)自定義函數(shù)和適當(dāng)數(shù)量的參數(shù)值,從而操作 DataFrme 中的所有元素。下面示例,實(shí)現(xiàn)了數(shù)據(jù)表中的元素值依次加 3。

首先自定義一個(gè)函數(shù),計(jì)算兩個(gè)元素的加和,如下所示:

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

然后使用自定義的函數(shù)對(duì) DataFrame 進(jìn)行操作:

df = pd.DataFrame(np.random.randn(4,3),columns=['c1','c2','c3'])
#傳入自定義函數(shù)以及要相加的數(shù)值3
df.pipe(adder,3)

完整的程序,如下所示:

import pandas as pd
import numpy as np
#自定義函數(shù)
def adder(ele1,ele2):
   return ele1+ele2
#操作DataFrame
df = pd.DataFrame(np.random.randn(4,3),columns=['c1','c2','c3'])
#相加前
print(df)
#相加后
print(df.pipe(adder,3))

輸出結(jié)果:

         c1        c2        c3
0  1.989075  0.932426 -0.523568
1 -1.736317  0.703575 -0.819940
2  0.657279 -0.872929  0.040841
3  0.441424  1.170723 -0.629618
         c1        c2        c3
0  4.989075  3.932426  2.476432
1  1.263683  3.703575  2.180060
2  3.657279  2.127071  3.040841
3  3.441424  4.170723  2.370382

操作行或列

如果要操作  DataFrame 的某一行或者某一列,可以使用 apply() 方法,該方法與描述性統(tǒng)計(jì)方法類似,都有可選參數(shù) axis,并且默認(rèn)按列操作。示例如下:

import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.randn(5,3),columns=['col1','col2','col3'])
df.apply(np.mean)
#默認(rèn)按列操作,計(jì)算每一列均值
print(df.apply(np.mean))

輸出結(jié)果:

col1    0.277214
col2    0.716651
col3   -0.250487
dtype: float64

傳遞軸參 axis=1, 表示逐行進(jìn)行操作,示例如下:

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

輸出結(jié)果:

       col1      col2      col3
0  0.210370 -0.662840 -0.281454
1 -0.875735  0.531935 -0.283924
2  1.036009 -0.958771 -1.048961
3 -1.266042 -0.257666  0.403416
4  0.496041 -1.071545  1.432817

0   -0.244641
1   -0.209242
2   -0.323908
3   -0.373431
4    0.285771
dtype: float64

求每一列中,最大值與最小值之差。示例如下:

import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.randn(5,3),columns=['col1','col2','col3'])
print(df.apply(lambda x: x.max() - x.min()))

輸出結(jié)果:

col1    3.538252
col2    2.904771
col3    2.650892
dtype: float64

操作單一元素

DataFrame 數(shù)據(jù)表結(jié)構(gòu)的 applymap() 和 Series 系列結(jié)構(gòu)的 map() 類似,它們都可以接受一個(gè) Python 函數(shù),并返回相應(yīng)的值。

示例如下:

import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.randn(5,3),columns=['col1','col2','col3'])
#自定義函數(shù)lambda函數(shù)
print(df['col1'].map(lambda x:x*100))

輸出結(jié)果:

0    -18.171706
1      1.582861
2     22.398156
3     32.395690
4   -133.143543
Name: col1, dtype: float64

下面示例使用了 applymap() 函數(shù),如下所示:

import pandas as pd
import numpy as np
#自定義函數(shù)
df = pd.DataFrame(np.random.randn(5,3),columns=['col1','col2','col3'])
print(df.applymap(lambda x:x*10))
print(df.apply(np.mean))

輸出結(jié)果:

        col1       col2       col3
0  -1.055926   7.952690  15.225932
1   9.362457 -12.230732   7.663450
2   2.910049  -2.782934   2.073905
3 -12.008132  -1.444989   5.988144
4   2.877850   6.563894   8.192513
#求均值:
col1    0.041726
col2   -0.038841
col3    0.782879
dtype: float64


以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)