使用Python對EXCEL數(shù)據(jù)的預(yù)處理
一、熟悉數(shù)據(jù)
我們將EXCEL中的數(shù)據(jù)導(dǎo)入之后,需要對數(shù)據(jù)進(jìn)行大致性的了解,當(dāng)對數(shù)據(jù)充分地了解之后,才便于后期的分析工作。
該部分涉及到四個基本方法,分別為“shape”“info”“head”“describe”。下面會具體介紹四者的用法與功能。
以下是我準(zhǔn)備好的一組簡單的excel數(shù)據(jù):

其中:“編號”“姓名”“識別碼”“時間”稱為索引列;左邊的“1”“2”···“6”稱為索引行。
通過第一篇的方法,將數(shù)據(jù)導(dǎo)入python中。代碼與輸出結(jié)果如下所示:
import pandas as pd df=pd.read_excel(r"D:\雜貨\新編碼.xlsx",sheet_name='Sheet1') print(df)

此部分不再詳述,請見第一篇。
1.1 shape
在導(dǎo)入excel表格數(shù)據(jù)后,使用該方法可以查看該表格的數(shù)據(jù)一共有多少行多少列,并以元組的形式輸出。需要表明的是,該方法輸出的行數(shù)和列數(shù)不包括索引行和索引列。
代碼與輸出結(jié)果如下:
m=df.shape#輸出導(dǎo)入的列表有多少行多少列 print(m)

最下面的(5,4)即為該方法輸出的結(jié)果,解釋為5行4列。
1.2 info
該方法可以幫助我們查看所導(dǎo)入的每一列的數(shù)據(jù)類型,并且還能查看是否有缺省值。
代碼與結(jié)果如下:
import pandas as pd df=pd.read_excel(r"D:\雜貨\新編碼.xlsx",sheet_name='Sheet1') df.info()#查看每一列的數(shù)據(jù)類型

從輸出結(jié)果可以看到,Column一列顯示為頭部的名稱,即為我們的索引列;Non-Null Count一列表示該列有幾個非缺省值,5 non-null表示該列中的每一個單元格都有內(nèi)容填入,沒有缺省值;Dtype一列則為每一列的數(shù)據(jù)類型,分別為object,int64,datetime64[ns]類型。
1.3 head
該方法能夠幫助我們預(yù)覽表格的前幾行的內(nèi)容。
形式為:head()需要預(yù)覽前面幾行就在括號里填數(shù)字幾。
代碼與結(jié)果如下:
import pandas as pd df=pd.read_excel(r"D:\雜貨\新編碼.xlsx",sheet_name='Sheet1') n=df.head(1)#可選擇預(yù)覽前幾行 k=df.head(2) j=df.head(3) print(n) print(k) print(j)

以上分別輸出了前1行,前2行,前3行。
1.4 describe
該方法能夠幫助我們查看某一列int64類型數(shù)據(jù)的個數(shù)、平均數(shù)、標(biāo)準(zhǔn)差、最大值、最小值、分位數(shù)。
代碼與結(jié)果如下:
import pandas as pd df=pd.read_excel(r"D:\雜貨\新編碼.xlsx",sheet_name='Sheet1') i=df.describe()#可查看數(shù)據(jù)的基本情況,int64類型的數(shù)據(jù) print(i)

由于只有“識別碼”一列的數(shù)據(jù)為int64類型的數(shù)據(jù),因此該方法最終輸出的結(jié)果只有識別碼的結(jié)果。
二、數(shù)據(jù)預(yù)處理
2.1 缺省值的處理
2.1.1 isnull()檢查缺省值
首先我們要查看我們的數(shù)據(jù)里是否含有缺省值。在1.2部分已經(jīng)介紹了使用info()方法查看缺省值,以下將介紹另一個檢查缺省值的方法。代碼與結(jié)果如下:
n=df.isnull()#true為缺省值print(n)

可以看到,F(xiàn)alse表示該單元格不是缺省值,若該單元格為缺省值,則結(jié)果會顯示為True。
2.1.2 dropna()缺省值的刪除
對于缺省值,我們可以選擇刪除它,代碼與結(jié)果如下:
n=df.isnull()#true為缺省值 print(n)
上面介紹了兩條代碼,第一條從其注釋可知道,當(dāng)某一行存在一個單元格的內(nèi)容為缺省值,那么無論其他單元格是否為缺省值,該行整行都會被刪除;第二條代碼的不同之處即在括號中有how='all',該方法下,只有當(dāng)某一行的所有單元格皆為缺省值時,才會將該行整行刪除,否則不會刪除該行。
作為對比,我將一個單元格的內(nèi)容刪除。

輸出后的內(nèi)容可以看到,王五所對應(yīng)的識別碼為NaN,這就表示該單元格無內(nèi)容,是空的,即所說的缺省值。
首先輸出的是dropna(how='all')的結(jié)果:

可以看到,當(dāng)只有王五的識別碼為缺省值時,并沒有刪除該行。
接下來輸出dropna()的結(jié)果:

可以看到,王五那一行因為有一個缺省值,整行都被刪除掉了。
2.1.3 fillna()缺省值的填充
對于缺省值,我們也可以選擇對其進(jìn)行填充。
為了對比,我刪除了兩個單元格的值。

輸出結(jié)果可知,姓名一列于識別碼一列共有兩個缺省值。
x=df.dropna()#只要帶有缺省值就整行刪除 print(x) y=df.dropna(how='all')#只刪除整行是缺省值的行 print(y)
上面提供了兩條代碼,第一條代碼表示將所有的缺省值都用“好”這個值填充,結(jié)果如下:

第二條代碼為指定用某個值填充某一列的缺省部分,即將姓名一列的缺省部分都用“王五”填充,識別碼一列的缺省部分都用“103”填充。結(jié)果如下:

2.2 重復(fù)值的處理
對于表單中出現(xiàn)的重復(fù)項,我們可以使用drop_duplicates()方法來保留其中一個。默認(rèn)保留第一個值。
為了對比,將數(shù)據(jù)修改為以下形式:

可以看到,此時有兩行的內(nèi)容是相同的。
接下來使用所介紹的方法來解決重復(fù)項的問題,代碼與結(jié)果如下:
x=df.fillna("好")#填缺省值,括號里寫要填入的值
print(x)
y=df.fillna({'姓名':'王五','識別碼':'103'})#指定列填入值,且可以多列填寫,但都寫在同一個字典里
print(y)
首先來看代碼的第一行,該方法的作用在其注釋處已經(jīng)說明,不再贅述,從其輸出結(jié)果看,索引行為“3”的那一行“王五”重復(fù)項被刪除了,只保留了索引行為“2”的那一行“王五”。
接著看第二行代碼的結(jié)果:

其輸出的結(jié)果其實(shí)和第一種是一樣的,雖然結(jié)果一樣,但是兩者的目的是不一樣的,第二行代碼括號中寫入了一個列表['姓名','識別碼'],該列表達(dá)到的作用就是指明我們要刪除的哪一列中存在的重復(fù)項,即是說:我想將“姓名”一列中的重復(fù)項和“識別碼”一列中的重復(fù)項進(jìn)行處理。在此我以兩個列名作為示例,若只想按照一個列名來刪除重復(fù)項的,則只需寫入一個列名即可。
2.3 數(shù)據(jù)類型的轉(zhuǎn)換
2.3.1 數(shù)據(jù)類型的查看
在前面已經(jīng)介紹了使用info()方法查看數(shù)據(jù)類型,在此再介紹一種方法,代碼與結(jié)果如下:
x=df['姓名'].dtype#針對查看某一列的數(shù)據(jù)類型print(x)

該方法是只能查看某一列的數(shù)據(jù)類型,只能查看一列,不能查看多列。只需將想查看的那一列的索引列名稱寫入中括號即可。最后輸出結(jié)果可以看到“姓名”一列的數(shù)據(jù)類型為object。
2.3.2 數(shù)據(jù)類型的轉(zhuǎn)換
這里我們使用的方法為astype()方法,首先查看原始數(shù)據(jù)中“識別碼”的數(shù)據(jù)類型。

可以看到其數(shù)據(jù)類型為int64。
接下來我們來修改該列的數(shù)據(jù)類型為float64,代碼與結(jié)果如下:
y=df['識別碼'].astype('float64')print(y)
可以看到輸出結(jié)果中識別碼一列的數(shù)據(jù)有了小數(shù)點(diǎn)后一位,且其dtype顯示為float64。
2.4 索引的設(shè)置
2.4.1 添加索引
索引的添加很簡單,以下是索引列的添加(修改)代碼與結(jié)果如下:
df.columns=['號編','名姓','碼別識','間時']print(df)

可以看到,最上面的索引列名稱被我替換掉了。
以下是索引行的添加(修改)。
df.index=['2','4','6','8','10']print(df)

可以看到,最左邊的索引行名稱被我改成了2,4,6,8,10。
需要注意的是,有多少行多少列就要添加多少行多少列的索引,不然會報錯。
2.4.2 重新設(shè)置索引
我們還可以使用列表中的某一列數(shù)據(jù)作為索引。方法是set_index()。
代碼與結(jié)果如下:
x=df.set_index("姓名")print(x)
從結(jié)果可以看出,最左邊的索引不再是數(shù)字,而成了姓名。
2.4.3 索引的重命名
針對重命名索引,有以下三種寫法:
df.rename(columns={"原來的索引":"想要修改成的索引"}) 該方法只修改索引列的名稱
df.rename(index={"原來的索引":"想要修改成的索引"}) 該方法只修改索引行的名稱
df.rename(columns={"原來的索引":"想要修改成的索引"},index={"原來的索引":"想要修改成的索引"}) 該方法能同時修改索引列和索引行的名稱
需要注意:該方法都使用了列表。代碼與結(jié)果如下:
x=df.drop_duplicates()#對所有值進(jìn)行重復(fù)值判斷,并且默認(rèn)保留第一個(行)值 y=df.drop_duplicates(subset=['姓名','識別碼'])#只針對某一列或某幾列進(jìn)行重復(fù)值刪除的判斷。 print(x) print(y)

上面的結(jié)果可以看出,索引行與索引列都分別修改成功,成為我所想要修改的名稱。
2.4.4 重置索引
該部分主要是針對層次化的excel表格使用,相對而言較為繁瑣,在這里暫時不過多講述,僅僅對方法進(jìn)行展示。
x=df['姓名'].dtype#針對查看某一列的數(shù)據(jù)類型 print(x)
由于本人在使用該方法時無法成功重置,因此暫時不對該方法進(jìn)行詳解,待之后找到原因再詳細(xì)介紹該方法。
三、結(jié)語
本篇內(nèi)容較多,但仍然是基于已有的表格進(jìn)行的一些基礎(chǔ)操作,后期介紹會逐步深入。若有錯誤還請指出。
到此這篇關(guān)于使用Python處理EXCEL基礎(chǔ)操作篇2Python對EXCEL數(shù)據(jù)的預(yù)處理的文章就介紹到這了,更多相關(guān)Python對EXCEL數(shù)據(jù)預(yù)處理內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python按順序重命名文件并分類轉(zhuǎn)移到各個文件夾中的實(shí)現(xiàn)代碼
這篇文章主要介紹了python按順序重命名文件并分類轉(zhuǎn)移到各個文件夾中,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-07-07
對python中大文件的導(dǎo)入與導(dǎo)出方法詳解
今天小編就為大家分享一篇對python中大文件的導(dǎo)入與導(dǎo)出方法詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-12-12
Python 解析pymysql模塊操作數(shù)據(jù)庫的方法
這篇文章主要介紹了Python 解析pymysql模塊操作數(shù)據(jù)庫的方法,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友可以參考下2020-02-02
Python ATM功能實(shí)現(xiàn)代碼實(shí)例
這篇文章主要介紹了Python ATM功能實(shí)現(xiàn)代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-03-03
python實(shí)現(xiàn)對指定字符串補(bǔ)足固定長度倍數(shù)截斷輸出的方法
今天小編就為大家分享一篇python實(shí)現(xiàn)對指定字符串補(bǔ)足固定長度倍數(shù)截斷輸出的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-11-11
pyqt5利用pyqtDesigner實(shí)現(xiàn)登錄界面
這篇文章主要為大家詳細(xì)介紹了pyqt5利用pyqtDesigner實(shí)現(xiàn)登錄界面,具有一定的參考價值,感興趣的小伙伴們可以參考一下2019-03-03
Python 按字典dict的鍵排序,并取出相應(yīng)的鍵值放于list中的實(shí)例
今天小編就為大家分享一篇Python 按字典dict的鍵排序,并取出相應(yīng)的鍵值放于list中的實(shí)例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-02-02

