Pandas小技巧,給Excel添加一列,處理成績數(shù)字的等級
給大家分享一個(gè)Pandas處理Excel的非常小的技巧知識點(diǎn)。
怎樣給一個(gè)Excel添加一列,這一列是根據(jù)其它列的數(shù)字計(jì)算出來的。
問題定義
問題是這樣的一個(gè)輸入的excel文件:
學(xué)號 姓名 性別 成績
101 王小麗 女 69
102 王寶勤 男 85
103 楊玉萍 女 49
104 田東會 女 90
105 陳雪蛟 女 73
106 楊建豐 男 42
107 黎梅佳 女 79
108 張興 男 91
109 馬進(jìn)春 女 48
110 魏改娟 女 100
111 王冰研 男 64
其中成績是一列數(shù)字,那么怎樣給成績劃分等級?如下是劃分等級的計(jì)算規(guī)則:
60分以下為E級
60~69分為D級
70~79分為C級
80~89分為B級
90分以上為A級
如下進(jìn)行處理,簡單起見,我挨個(gè)進(jìn)行解釋:
1. 導(dǎo)入pandas模塊,讀取excel文件
import pandas as pd
df = pd.read_excel("成績表.xlsx", sheet_name=0)
第一句導(dǎo)入了pandas模塊,這是python的數(shù)據(jù)處理和統(tǒng)計(jì)分析的重要模塊。
pd.read_excel可以讀取excel的文件,sheet_name=0意思是讀取第一個(gè)sheet表格的數(shù)據(jù)。
這個(gè)df非常重要,表達(dá)的就是一個(gè)表格數(shù)據(jù)。
2. 編寫自己的根據(jù)成績劃分等級的函數(shù)
def grade_to_level(grade):
"""
grade是成績
把這個(gè)Excel中的成績,劃分為A- E這五個(gè)分?jǐn)?shù)區(qū)間。
60分以下為E級、60~69分為D級、
70~79分為C級、80~89分為B級、90分以上為A級。
"""
if grade >= 90:
return 'A'
elif grade >= 80:
return 'B'
elif grade >= 70:
return 'C'
elif grade >= 60:
return 'D'
else:
return 'E'
這個(gè)函數(shù)有個(gè)特點(diǎn),輸入的參數(shù)是grade,其實(shí)就是一個(gè)數(shù)字,而這個(gè)數(shù)字,是excel表格的“數(shù)字”這一列的每個(gè)值。
而這個(gè)函數(shù)的返回,就是這個(gè)數(shù)字劃分后的等級,是5個(gè)字符串,A~E
注意,這個(gè)函數(shù)的輸入是單個(gè)數(shù)字,輸出是單個(gè)字符串。這個(gè)字符串將成為excel新列的每個(gè)值。
3. 給pandas的數(shù)據(jù)表df添加一個(gè)新列
df['等級'] = df['成績'].apply(grade_to_level)
其中df['成績']意思是訪問了當(dāng)前excel的“成績”這一列,這是一列數(shù)據(jù),里面有很多數(shù)字。
df['成績'].apply是在這個(gè)成績列上調(diào)用的函數(shù),而這個(gè)函數(shù)很神奇,會調(diào)用我們第2步驟自己寫的 grade_to_level 函數(shù)。
這行代碼執(zhí)行的邏輯,是取出成績列的每個(gè)成績數(shù)字,傳給grade_to_level函數(shù)的每個(gè)grade參數(shù),得到結(jié)果是等級字符串。
而這些等級字符串串聯(lián)在一起,形成了一個(gè)新的列。
這個(gè)新列和成績列的行數(shù)一模一樣相等,同時(shí)每個(gè)等級和每個(gè)成績是一一對應(yīng)的關(guān)系。
而等式左側(cè)的df['等級']則接收了這個(gè)結(jié)果的列。
最終這行代碼實(shí)現(xiàn)了,成績列被grade_to_level一一轉(zhuǎn)換成了等級列。
4. 輸出成結(jié)果excel文件
df.to_excel("成績表分類后.xlsx", index=False)
這一列,將新的處理后的df,輸出成一個(gè)excel文件,名字是 成績表分類后.xlsx
如果不加index=False這個(gè)參數(shù),那么輸出的結(jié)果表格中,會多一列,里面是從0開始到1到一直遞增的數(shù)字,無意義。所以一般都加上這個(gè)參數(shù)。
5. 最后的效果
輸入文件截圖:

輸出文件結(jié)果:

6. 數(shù)據(jù)和代碼地址
代碼地址,自己粘貼到瀏覽器訪問:
https://gitee.com/antpython/ant-codes-publish/tree/master/01pandas/01pandas%E7%BB%99%E6%88%90%E7%BB%A9%E5%88%86%E7%BA%A7%E5%88%AB
