亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

分享5個(gè)數(shù)據(jù)處理更加靈活的pandas調(diào)用函數(shù)方法

 更新時(shí)間:2022年04月24日 11:51:23   作者:Python學(xué)習(xí)與數(shù)據(jù)挖掘  
這篇文章主要介紹了分享5個(gè)數(shù)據(jù)處理更加靈活的pandas調(diào)用函數(shù)方法,文章基于python的相關(guān)內(nèi)容展開(kāi)詳細(xì)介紹,需要的小伙伴可以參考一下

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

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

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

姓名

語(yǔ)文

數(shù)學(xué)

英語(yǔ)

性別

總分

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可以對(duì)DataFrame類(lèi)型數(shù)據(jù)按照列或行進(jìn)行函數(shù)處理,默認(rèn)情況下是按照(單獨(dú)對(duì)Series亦可)。

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

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

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

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

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

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

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

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

當(dāng)然,我們也可以直接用調(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ù)一列的值條件進(jìn)行的數(shù)據(jù)處理,我們也可以根據(jù)多列組合條件(可以了解為按行)進(jìn)行處理,需要注意這種情況下需要指定參數(shù)axis=1,具體看下面案例。

案例中,我們認(rèn)為總分高于200數(shù)學(xué)分?jǐn)?shù)高于90為高分

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

這5個(gè)pandas調(diào)用函數(shù)的方法,讓我的數(shù)據(jù)處理更加靈活自如_agg

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

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

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

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

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

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

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

2. applymap

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

比如對(duì)語(yǔ)數(shù)外三科超過(guò)90分認(rèn)為是科目高分

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

語(yǔ)文

數(shù)學(xué)

英語(yǔ)

0

高分

高分

1

其他

高分

2

其他

其他

3

高分

其他

4

其他

其他

5

其他

其他

6

其他

其他

7

其他

其他

8

其他

其他

3. map

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

以上面性別列中的1替換為男,0替換為女為例,還可以通過(guò)map來(lái)實(shí)現(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一般用于聚合,在分組或透視操作中常見(jiàn)到,用法是和apply比較接近。

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

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

這5個(gè)pandas調(diào)用函數(shù)的方法,讓我的數(shù)據(jù)處理更加靈活自如_apply_02

我們還可以對(duì)不同的列進(jìn)行不同的運(yùn)算(用字典形式指定)

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

這5個(gè)pandas調(diào)用函數(shù)的方法,讓我的數(shù)據(jù)處理更加靈活自如_agg_03

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

5. pipe

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

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

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

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

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

# 定義一個(gè)函數(shù),總分大于等于n,性別為sex的同學(xué)數(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,不分性別的學(xué)生成績(jī),可以這樣:

df.pipe(total,200,2)

這5個(gè)pandas調(diào)用函數(shù)的方法,讓我的數(shù)據(jù)處理更加靈活自如_python_04

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

df.pipe(total,150,1)

這5個(gè)pandas調(diào)用函數(shù)的方法,讓我的數(shù)據(jù)處理更加靈活自如_agg_05

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

df.pipe(total,200,0)

這5個(gè)pandas調(diào)用函數(shù)的方法,讓我的數(shù)據(jù)處理更加靈活自如_數(shù)據(jù)處理_06

以上就是本次我們介紹的5種調(diào)用函數(shù)的方法,這些操作技巧可以讓我們?cè)谔幚頂?shù)據(jù)時(shí)更加靈活自如

到此這篇關(guān)于分享5個(gè)數(shù)據(jù)處理更加靈活的pandas調(diào)用函數(shù)方法的文章就介紹到這了,更多相關(guān)pandas調(diào)用函數(shù)方法內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論