當前位置:菜譜大全網 - 菜譜 - Python其實很簡單。第21章數據幀數據處理

Python其實很簡單。第21章數據幀數據處理

將Excel中的數據讀入DataFrame後,進行各種數據處理非常方便。

21.1列間總和

求總分(總分=語文+數學+英語)

對於上壹章提到的學生報告單,只需要壹句話就可以計算出總分並填寫。

df,0,就地=真)

壹次將整個數據幀中的值“98,76,99”替換為“0”。

21.2排序

您可以將壹列排序為關鍵字段,或者將幾列分別排序為主鍵字段和輔鍵字段。排序可以按升序或降序排序。

函數sort_values()的語法格式如下:

df.sort_values(by=["col1 "," col2 ",......,“coln”],升序=False)

其中coln表示列名或列名列表;升序表示排序方式,值為True表示升序,可以默認,值為False表示降序。

比如:

Df=df.sort_values(by=['總分'],升序=False)

就是按“總分”從高到低排序。

Df=df.sort_values(by=['總分','語言'],升序=False)

就是按照“總分”從高到低排序。如果“總分”相同,則按“語文”得分從高到低排序。

21.3字段截斷

Slice()可以從列中截取壹個字符串。格式如下:

切片(開始、停止)

其中start表示起始位置;停止表示結束位置。

示例:

df[' grade ']= df[' student number ']. str . slice(0,2)

通過該語句,可以截取學號字段的第1和第2個字符,並賦給年級字段。

21.4記錄提取

可以提取符合條件的記錄。

例如:提取總分> 300的記錄。

df【df。總分> 300]

提取總分在300和310之間(含300和310)的記錄。

df【df。總分。在(306,310)之間]

提取學號中帶有“0803”的記錄。這樣可以很方便的提取壹個類的信息。

df【df。學生證。字符串包含(' 0803 ',na=False)]

這裏Na=False,表示如果遇到NaN這樣的數據,直接做錯配處理。

21.5修改記錄

1,整列替換

我們之前已經用數據填充了整列,填充時會覆蓋原來的數據。

即下面的語句:

Df['總分']=df['中文']+df['數學']+df['英文']

2.個別修改

如果值“99”被值“100”替換,可以使用以下語句:

df.replace('99 ',' 100 ')

替換指定列的值,如將中文列和英文列中的值' 99 '替換為值' 100 ',可以使用以下語句:

Df.replace({ '中文':99,'英文':99},100)

以下程序可用於驗證:

從熊貓導入read_excel

file='d:/student.xlsx '

Df = read _ excel (file,sheet _ name = 0,converters = { ' student number ':str })

打印(df[(df。中文==99) |(df。英語==99)])

Df=df.replace({ '中文':99,'英文':99},100)

打印(df[(df。中文==99) |(df。英語==99)])

運行結果如下:

序號學號姓名年級班級語文數學英語總分排名

28 29 090802鼎能通09南119 120 99 338南

29 30 090203沈09南109 108 99 316南

空數據幀

欄目:[序號,學號,姓名,年級,班級,語文,數學,英語,總分,排名]

索引:[]

可以看出,第壹條print()語句的輸出結果中有兩條記錄滿足“中文或英文99分”的條件。執行替換語句後,df中沒有符合“中文或英文99分”條件的記錄。

21.6記錄合並

函數concat()()的格式如下:

concat([dataFrame1,dataFrame2,......],ignore_index=True)

其中dataFrame1等表示要合並的dataFrame數據集;Ignore_index=True表示合並後重新索引。它的返回值也是DataFrame類型。

Concat()函數和append()函數的功能非常相似。

示例:

導入熊貓#導入熊貓模塊

從熊貓導入read_excel #導入read_execel

File='d:/student.xlsx' #變量File表示文件路徑。請註意'/'的用法數據見第18章表18-1。

Df = read _ excel (file,sheet _ name = 0,converters = { ' student number ':str })

#將Excel文件導入DataFrame變量。

Df=Df[:5] #截取df的前5條記錄。

打印(df) #輸出df

Df1=Df[:3] #截取的df的前三條記錄存儲在Df1中。

Df2=Df[3:5] #截取的df的最後兩條記錄存儲在Df2中。

Df3 =熊貓。concat ([df2,df1]) #合並df2和df1,存儲在DF3中。

打印(df3) #輸出df3

運行結果如下:

序號學號姓名年級班級語文數學英語總分排名

0 1 070101王博宇楠楠84 71 93楠楠。

1 2 070102陳冠濤楠楠89 89 89楠楠

李楠楠89 72 76楠楠

3 4 070204姜海燕南南89 89 89南南

4 5 070205林若曦楠楠91 95 83楠楠

序號學號姓名年級班級語文數學英語總分排名

3 4 070204姜海燕南南89 89 89南南

4 5 070205林若曦楠楠91 95 83楠楠

0 1 070101王博宇楠楠84 71 93楠楠。

1 2 070102陳冠濤楠楠89 89 89楠楠

李楠楠89 72 76楠楠

由於df1被合並到df2中,可以看出該索引仍然保持原來的狀態。

21.7統計次數

您可以用以下方法計算壹個值在壹行或壹個區域中出現的次數。

從熊貓導入read_excel

file='d:/student.xlsx '

Df = read _ excel (file,sheet _ name = 0,converters = { ' student number ':str })

df=df[:5]

打印(df)

打印(df['中文']。value_counts())

輸出結果如下:

序號學號姓名年級班級語文數學英語總分排名

0 1 070101王博宇楠楠84 71 93楠楠。

1 2 070102陳冠濤楠楠89 89 89楠楠

李楠楠89 72 76楠楠

3 4 070204姜海燕南南89 89 89南南

4 5 070205林若曦楠楠91 95 83楠楠

89 3

84 1

91 1

名稱:中文,型號:int64

可以看出,壹列中每個值的出現次數可以通過value_counts()函數來計算。

value_counts()函數的參數是:

升序,升序時升序=真,升序時升序=假(該參數可以默認);

Normalize,當normalize=True時,顯示的不再是每個值出現的次數,而是比例。

更改報表打印(df['中文']。value_counts())轉換為:

打印(df['中文']。value _ counts(升序=真,規範化=真))

輸出變成:

91 0.2

84 0.2

89 0.6

名稱:中文,型號:float64

21.8按值查找

打印(df['中文']。isin([84,91])

它的功能是查找“語言”列中的值與isin指向的列表中的元素壹致的記錄。如果結果為真,否則為假。

輸出結果:

0真

1假

2錯誤

3錯誤

4正確

名稱:中文,數據類型:布爾

21.9數據分區

按照壹個劃分標準,可以將數據按照區域進行劃分,用相應的標簽來表示,這可以通過cut()方法來實現。

語法格式如下:

剪切(系列,箱,右=真,標簽=空)

其中包括:

Series表示要分組的數據;

Bins表示分組的基礎,是壹個列表,其元素是分區的邊界值,比如[0,72,96,120],即分為三個分區,分別是0~72,72~96,96~120,默認為“不包含左包和右包”;

Right表示分組時右側是否閉合;

Labels表示分組的自定義標簽,或者它不能被重新定義。

讓我們將上述學生報告表中的語文成績分組,並增加新的壹欄“語文成績”。

進口熊貓作為pd

從熊貓導入read_excel #導入read_execel

file='d:/student.xlsx '

Df = read _ excel (file,sheet _ name = 0,converters = { ' student number ':str })

df[' grade ']= df[' student number ']. str . slice(0,2)

Df[' class' ]=df['學生編號'].str.slice(0,4)

Df。總分=df。中文+df。數學+df。英語。

bin =[0,72,96,最大值(df。中文)+1] #

Lab=['失敗','通過','優秀']

Grade=pd.cut(df。語言,垃圾箱,右=假,標簽=實驗室)。

Df['語言水平']=成績

print(df.head())

Print("語文成績統計結果:")

打印(df['語言級別']。value_counts())

運行結果如下:

序號學號姓名年級班級語文數學英語總分語文年級

0 1 0701王博宇07 0701 84 71 93 248通過。

1 2 070102陳冠濤07 0701 89 89 267過關。

李0701 89 72 76 237通過。

姜海燕通過了07 0702 89 89 267。

4 5 070205林若曦07 0702 91 95 83 269通過。

語文成績統計結果:

通行證17

優秀10

失敗4

名稱:語言級別,數據類型:int64