溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

pandas調(diào)用函數(shù)怎么用

發(fā)布時間:2022-04-24 14:15:04 來源:億速云 閱讀:190 作者:iii 欄目:開發(fā)技術(shù)

這篇“pandas調(diào)用函數(shù)怎么用”文章的知識點大部分人都不太理解,所以小編給大家總結(jié)了以下內(nèi)容,內(nèi)容詳細,步驟清晰,具有一定的借鑒價值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來看看這篇“pandas調(diào)用函數(shù)怎么用”文章吧。

0. 數(shù)據(jù)預覽

這里的數(shù)據(jù)是虛構(gòu)的語數(shù)外成績,大家在演示的時候拷貝一下就好啦。

import pandas as pd
df = pd.read_clipboard()
df

姓名

語文

數(shù)學

英語

性別

總分

0

才哥

91

95

92

1

1

小明

82

93

91

1

2

小華

82

87

94

1

3

小草

96

55

88

0

4

小紅

51

41

70

0

5

小花

58

59

40

0

6

小龍

70

55

59

1

7

杰克

53

44

42

1

8

韓梅梅

45

51

67

0

1. apply

apply可以對DataFrame類型數(shù)據(jù)按照列或行進行函數(shù)處理,默認情況下是按照(單獨對Series亦可)。

在案例數(shù)據(jù)中,比如我們想將性別列中的1替換為男,0替換為女,那么可以這樣搞定。

先自定義一個函數(shù),這個函數(shù)有一個參數(shù) s(Series類型數(shù)據(jù))。

def getSex(s):
    if s==1:
        return '男'
    elif s==0:
        return '女'

上述函數(shù)還有更簡潔寫法,這里方便理解采用最直觀的寫法哈。

然后,我們直接使用apply去調(diào)用這個函數(shù)即可。

df['性別'].apply(getSex)

可以看到輸出結(jié)果如下:

0 男
1 男
2 男
3 女
4 女
5 女
6 男
7 男
8 女
Name: 性別, dtype: object

當然,我們也可以直接用調(diào)用匿名函數(shù)lambda的形式:

df['性別'].apply( lambda s: '男' if s==1 else '女' )

可以看到結(jié)果是一樣的:

0 男
1 男
2 男
3 女
4 女
5 女
6 男
7 男
8 女
Name: 性別, dtype: object

以上是單純根據(jù)一列的值條件進行的數(shù)據(jù)處理,我們也可以根據(jù)多列組合條件(可以了解為按行)進行處理,需要注意這種情況下需要指定參數(shù)axis=1,具體看下面案例。

案例中,我們認為總分高于200數(shù)學分數(shù)高于90為高分

# 多列條件組合
df['level'] = df.apply(lambda df: '高分' if df['總分']>=200 and df['數(shù)學']>=90 else '其他', axis=1)
df

pandas調(diào)用函數(shù)怎么用

同樣,上述用apply調(diào)用的函數(shù)都是自定義的,實際上我們也可以調(diào)用內(nèi)置或者pandas/numpy自帶的函數(shù)。

比如,求語數(shù)外和總分最高分:

# python內(nèi)置的函數(shù)
df[['語文','數(shù)學','英語','總分']].apply(max)

語文 96
數(shù)學 95
英語 94
總分 278
dtype: int64

求語數(shù)外和總分平均分:

# numpy自帶的函數(shù)
import numpy as np
df[['語文','數(shù)學','英語','總分']].apply(np.mean)

語文 69.777778
數(shù)學 64.444444
英語 71.444444
總分 205.666667
dtype: float64

2. applymap

applymap則是對每個元素的函數(shù)處理,變量是每個元素值。

比如對語數(shù)外三科超過90分認為是科目高分

df[['語文','數(shù)學','英語']].applymap(lambda x:'高分' if x>=90 else '其他')

語文

數(shù)學

英語

0

高分

高分

1

其他

高分

2

其他

其他

3

高分

其他

4

其他

其他

5

其他

其他

6

其他

其他

7

其他

其他

8

其他

其他

3. map

map則是根據(jù)輸入對應關(guān)系映射值返回最終數(shù)據(jù),作用于某一列。傳入的值可以是字典,鍵值為原始值,值為需要替換的值。也可以傳入一個函數(shù)或者字符格式化表達式等等。

以上面性別列中的1替換為男,0替換為女為例,還可以通過map來實現(xiàn)
 

df['性別'].map({1:'男', 0:'女'})

輸出結(jié)果也是一致的:

0 男
1 男
2 男
3 女
4 女
5 女
6 男
7 男
8 女
Name: 性別, dtype: object

比如總分列想變成格式化字符:

df['總分'].map('總分:{}分'.format)

0 總分:278分
1 總分:266分
2 總分:263分
3 總分:239分
4 總分:162分
5 總分:157分
6 總分:184分
7 總分:139分
8 總分:163分
Name: 總分, dtype: object

4. agg

agg一般用于聚合,在分組或透視操作中常見到,用法是和apply比較接近。

比如,求語數(shù)外和總分的最高分、最低分和平均分

df[['語文','數(shù)學','英語','總分']].agg(['max','min','mean'])

pandas調(diào)用函數(shù)怎么用

我們還可以對不同的列進行不同的運算(用字典形式指定)

# 語文最高分、數(shù)學最低分和英文最高最低分
df.agg({'語文':['max'],'數(shù)學':'min','英語':['max','min']})

pandas調(diào)用函數(shù)怎么用

當然也支持自定義函數(shù)的調(diào)用

5. pipe

以上四個調(diào)用函數(shù)的方法,我們發(fā)現(xiàn)被調(diào)用的函數(shù)的參數(shù)就是 DataFrameSerise數(shù)據(jù),如果我們被調(diào)用的函數(shù)還需要別的參數(shù),那么該如何做呢?

所以,pipe就出現(xiàn)了。

pipe又稱管道方法,可以將我們的處理分析過程標準化、流程化。它在調(diào)用函數(shù)的時候可以帶被調(diào)用函數(shù)的其他參數(shù),這樣就方便自定義函數(shù)的功能擴展了。

比如,我們需要獲取總分大于n,性別為sex的同學的數(shù)據(jù),其中n和sex是可變參數(shù),那么用apply等就不太好處理。這個時候,就可以用到pipe方法來搞事了!

我們先定義一個函數(shù):

# 定義一個函數(shù),總分大于等于n,性別為sex的同學數(shù)據(jù)(sex為2表示不分性別)
def total(df, n, sex):
dfT = df.copy()
if sex == 2:
return dfT[(dfT['總分']>=n)]
else:
return dfT[(dfT['總分']>=n) & (dfT['性別']==sex)]

如果我們要找到總分大于200,不分性別的學生成績,可以這樣:

df.pipe(total,200,2)

pandas調(diào)用函數(shù)怎么用

再找總分大于150,性別為男生(1)的學生成績,可以這樣:

df.pipe(total,150,1)

pandas調(diào)用函數(shù)怎么用

再找總分大于200,性別為女生(0)的學生成績,可以這樣:
 

df.pipe(total,200,0)

pandas調(diào)用函數(shù)怎么用

以上就是關(guān)于“pandas調(diào)用函數(shù)怎么用”這篇文章的內(nèi)容,相信大家都有了一定的了解,希望小編分享的內(nèi)容對大家有幫助,若想了解更多相關(guān)的知識內(nèi)容,請關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI