使用Python對(duì)EXCEL數(shù)據(jù)的預(yù)處理
一、熟悉數(shù)據(jù)
我們將EXCEL中的數(shù)據(jù)導(dǎo)入之后,需要對(duì)數(shù)據(jù)進(jìn)行大致性的了解,當(dāng)對(duì)數(shù)據(jù)充分地了解之后,才便于后期的分析工作。
該部分涉及到四個(gè)基本方法,分別為“shape”“info”“head”“describe”。下面會(huì)具體介紹四者的用法與功能。
以下是我準(zhǔn)備好的一組簡(jiǎn)單的excel數(shù)據(jù):
其中:“編號(hào)”“姓名”“識(shí)別碼”“時(shí)間”稱為索引列;左邊的“1”“2”···“6”稱為索引行。
通過(guò)第一篇的方法,將數(shù)據(jù)導(dǎo)入python中。代碼與輸出結(jié)果如下所示:
import pandas as pd df=pd.read_excel(r"D:\雜貨\新編碼.xlsx",sheet_name='Sheet1') print(df)
此部分不再詳述,請(qǐng)見(jiàn)第一篇。
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一列表示該列有幾個(gè)非缺省值,5 non-null表示該列中的每一個(gè)單元格都有內(nèi)容填入,沒(méi)有缺省值;Dtype一列則為每一列的數(shù)據(jù)類型,分別為object,int64,datetime64[ns]類型。
1.3 head
該方法能夠幫助我們預(yù)覽表格的前幾行的內(nèi)容。
形式為:head()需要預(yù)覽前面幾行就在括號(hào)里填數(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ù)的個(gè)數(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í)別碼”一列的數(shù)據(jù)為int64類型的數(shù)據(jù),因此該方法最終輸出的結(jié)果只有識(shí)別碼的結(jié)果。
二、數(shù)據(jù)預(yù)處理
2.1 缺省值的處理
2.1.1 isnull()檢查缺省值
首先我們要查看我們的數(shù)據(jù)里是否含有缺省值。在1.2部分已經(jīng)介紹了使用info()方法查看缺省值,以下將介紹另一個(gè)檢查缺省值的方法。代碼與結(jié)果如下:
n=df.isnull()#true為缺省值print(n)
可以看到,F(xiàn)alse表示該單元格不是缺省值,若該單元格為缺省值,則結(jié)果會(huì)顯示為True。
2.1.2 dropna()缺省值的刪除
對(duì)于缺省值,我們可以選擇刪除它,代碼與結(jié)果如下:
n=df.isnull()#true為缺省值 print(n)
上面介紹了兩條代碼,第一條從其注釋可知道,當(dāng)某一行存在一個(gè)單元格的內(nèi)容為缺省值,那么無(wú)論其他單元格是否為缺省值,該行整行都會(huì)被刪除;第二條代碼的不同之處即在括號(hào)中有how='all',該方法下,只有當(dāng)某一行的所有單元格皆為缺省值時(shí),才會(huì)將該行整行刪除,否則不會(huì)刪除該行。
作為對(duì)比,我將一個(gè)單元格的內(nèi)容刪除。
輸出后的內(nèi)容可以看到,王五所對(duì)應(yīng)的識(shí)別碼為NaN,這就表示該單元格無(wú)內(nèi)容,是空的,即所說(shuō)的缺省值。
首先輸出的是dropna(how='all')的結(jié)果:
可以看到,當(dāng)只有王五的識(shí)別碼為缺省值時(shí),并沒(méi)有刪除該行。
接下來(lái)輸出dropna()的結(jié)果:
可以看到,王五那一行因?yàn)橛幸粋€(gè)缺省值,整行都被刪除掉了。
2.1.3 fillna()缺省值的填充
對(duì)于缺省值,我們也可以選擇對(duì)其進(jìn)行填充。
為了對(duì)比,我刪除了兩個(gè)單元格的值。
輸出結(jié)果可知,姓名一列于識(shí)別碼一列共有兩個(gè)缺省值。
x=df.dropna()#只要帶有缺省值就整行刪除 print(x) y=df.dropna(how='all')#只刪除整行是缺省值的行 print(y)
上面提供了兩條代碼,第一條代碼表示將所有的缺省值都用“好”這個(gè)值填充,結(jié)果如下:
第二條代碼為指定用某個(gè)值填充某一列的缺省部分,即將姓名一列的缺省部分都用“王五”填充,識(shí)別碼一列的缺省部分都用“103”填充。結(jié)果如下:
2.2 重復(fù)值的處理
對(duì)于表單中出現(xiàn)的重復(fù)項(xiàng),我們可以使用drop_duplicates()方法來(lái)保留其中一個(gè)。默認(rèn)保留第一個(gè)值。
為了對(duì)比,將數(shù)據(jù)修改為以下形式:
可以看到,此時(shí)有兩行的內(nèi)容是相同的。
接下來(lái)使用所介紹的方法來(lái)解決重復(fù)項(xiàng)的問(wèn)題,代碼與結(jié)果如下:
x=df.fillna("好")#填缺省值,括號(hào)里寫要填入的值 print(x) y=df.fillna({'姓名':'王五','識(shí)別碼':'103'})#指定列填入值,且可以多列填寫,但都寫在同一個(gè)字典里 print(y)
首先來(lái)看代碼的第一行,該方法的作用在其注釋處已經(jīng)說(shuō)明,不再贅述,從其輸出結(jié)果看,索引行為“3”的那一行“王五”重復(fù)項(xiàng)被刪除了,只保留了索引行為“2”的那一行“王五”。
接著看第二行代碼的結(jié)果:
其輸出的結(jié)果其實(shí)和第一種是一樣的,雖然結(jié)果一樣,但是兩者的目的是不一樣的,第二行代碼括號(hào)中寫入了一個(gè)列表['姓名','識(shí)別碼'],該列表達(dá)到的作用就是指明我們要?jiǎng)h除的哪一列中存在的重復(fù)項(xiàng),即是說(shuō):我想將“姓名”一列中的重復(fù)項(xiàng)和“識(shí)別碼”一列中的重復(fù)項(xiàng)進(jìn)行處理。在此我以兩個(gè)列名作為示例,若只想按照一個(gè)列名來(lái)刪除重復(fù)項(xiàng)的,則只需寫入一個(gè)列名即可。
2.3 數(shù)據(jù)類型的轉(zhuǎn)換
2.3.1 數(shù)據(jù)類型的查看
在前面已經(jīng)介紹了使用info()方法查看數(shù)據(jù)類型,在此再介紹一種方法,代碼與結(jié)果如下:
x=df['姓名'].dtype#針對(duì)查看某一列的數(shù)據(jù)類型print(x)
該方法是只能查看某一列的數(shù)據(jù)類型,只能查看一列,不能查看多列。只需將想查看的那一列的索引列名稱寫入中括號(hào)即可。最后輸出結(jié)果可以看到“姓名”一列的數(shù)據(jù)類型為object。
2.3.2 數(shù)據(jù)類型的轉(zhuǎn)換
這里我們使用的方法為astype()方法,首先查看原始數(shù)據(jù)中“識(shí)別碼”的數(shù)據(jù)類型。
可以看到其數(shù)據(jù)類型為int64。
接下來(lái)我們來(lái)修改該列的數(shù)據(jù)類型為float64,代碼與結(jié)果如下:
y=df['識(shí)別碼'].astype('float64')print(y)
可以看到輸出結(jié)果中識(shí)別碼一列的數(shù)據(jù)有了小數(shù)點(diǎn)后一位,且其dtype顯示為float64。
2.4 索引的設(shè)置
2.4.1 添加索引
索引的添加很簡(jiǎn)單,以下是索引列的添加(修改)代碼與結(jié)果如下:
df.columns=['號(hào)編','名姓','碼別識(shí)','間時(shí)']print(df)
可以看到,最上面的索引列名稱被我替換掉了。
以下是索引行的添加(修改)。
df.index=['2','4','6','8','10']print(df)
可以看到,最左邊的索引行名稱被我改成了2,4,6,8,10。
需要注意的是,有多少行多少列就要添加多少行多少列的索引,不然會(huì)報(bào)錯(cuò)。
2.4.2 重新設(shè)置索引
我們還可以使用列表中的某一列數(shù)據(jù)作為索引。方法是set_index()。
代碼與結(jié)果如下:
x=df.set_index("姓名")print(x)
從結(jié)果可以看出,最左邊的索引不再是數(shù)字,而成了姓名。
2.4.3 索引的重命名
針對(duì)重命名索引,有以下三種寫法:
df.rename(columns={"原來(lái)的索引":"想要修改成的索引"}) 該方法只修改索引列的名稱
df.rename(index={"原來(lái)的索引":"想要修改成的索引"}) 該方法只修改索引行的名稱
df.rename(columns={"原來(lái)的索引":"想要修改成的索引"},index={"原來(lái)的索引":"想要修改成的索引"}) 該方法能同時(shí)修改索引列和索引行的名稱
需要注意:該方法都使用了列表。代碼與結(jié)果如下:
x=df.drop_duplicates()#對(duì)所有值進(jìn)行重復(fù)值判斷,并且默認(rèn)保留第一個(gè)(行)值 y=df.drop_duplicates(subset=['姓名','識(shí)別碼'])#只針對(duì)某一列或某幾列進(jìn)行重復(fù)值刪除的判斷。 print(x) print(y)
上面的結(jié)果可以看出,索引行與索引列都分別修改成功,成為我所想要修改的名稱。
2.4.4 重置索引
該部分主要是針對(duì)層次化的excel表格使用,相對(duì)而言較為繁瑣,在這里暫時(shí)不過(guò)多講述,僅僅對(duì)方法進(jìn)行展示。
x=df['姓名'].dtype#針對(duì)查看某一列的數(shù)據(jù)類型 print(x)
由于本人在使用該方法時(shí)無(wú)法成功重置,因此暫時(shí)不對(duì)該方法進(jìn)行詳解,待之后找到原因再詳細(xì)介紹該方法。
三、結(jié)語(yǔ)
本篇內(nèi)容較多,但仍然是基于已有的表格進(jìn)行的一些基礎(chǔ)操作,后期介紹會(huì)逐步深入。若有錯(cuò)誤還請(qǐng)指出。
到此這篇關(guān)于使用Python處理EXCEL基礎(chǔ)操作篇2Python對(duì)EXCEL數(shù)據(jù)的預(yù)處理的文章就介紹到這了,更多相關(guān)Python對(duì)EXCEL數(shù)據(jù)預(yù)處理內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python模塊學(xué)習(xí)之struct模塊詳解
這篇文章主要介紹了Python模塊學(xué)習(xí)之struct模塊詳解,該模塊作用是完成Python數(shù)值和C語(yǔ)言結(jié)構(gòu)體的Python字符串形式間的轉(zhuǎn)換,這可以用于處理存儲(chǔ)在文件中或從網(wǎng)絡(luò)連接中存儲(chǔ)的二進(jìn)制數(shù)據(jù),以及其他數(shù)據(jù)源,需要的朋友可以參考下2023-07-07Python實(shí)現(xiàn)簡(jiǎn)易的限流器介紹
大家好,本篇文章主要講的是Python實(shí)現(xiàn)簡(jiǎn)易的限流器介紹,感興趣的同學(xué)趕快來(lái)看一看吧,對(duì)你有幫助的話記得收藏一下2022-01-01python定時(shí)檢查某個(gè)進(jìn)程是否已經(jīng)關(guān)閉的方法
這篇文章主要介紹了python定時(shí)檢查某個(gè)進(jìn)程是否已經(jīng)關(guān)閉的方法,涉及Python進(jìn)程與時(shí)間的相關(guān)操作技巧,需要的朋友可以參考下2015-05-05Python實(shí)現(xiàn)讀取文件最后n行的方法
這篇文章主要介紹了Python實(shí)現(xiàn)讀取文件最后n行的方法,涉及Python針對(duì)文件的讀取、遍歷與運(yùn)算相關(guān)操作技巧,需要的朋友可以參考下2017-02-02

PyCharm更換pip源、模塊安裝以及PyCharm依賴包導(dǎo)入導(dǎo)出功能

python定時(shí)執(zhí)行指定函數(shù)的方法

python通過(guò)設(shè)置WordCloud參數(shù)實(shí)現(xiàn)定制詞云