您好,登錄后才能下訂單哦!
如何使用pandas中DataFrame進(jìn)行數(shù)據(jù)處理?這個(gè)問(wèn)題可能是我們?nèi)粘W(xué)習(xí)或工作經(jīng)常見(jiàn)到的。希望通過(guò)這個(gè)問(wèn)題能讓你收獲頗深。下面是小編給大家?guī)?lái)的參考內(nèi)容,讓我們一起來(lái)看看吧!
DataFrame是一個(gè)表格型的數(shù)據(jù)結(jié)構(gòu),它擁有兩個(gè)索引,分別是行索引以及列索引,使得我們可以很方便地獲取對(duì)應(yīng)的行以及列。這就大大降低了我們查找數(shù)據(jù)處理數(shù)據(jù)的難度。
首先,我們先從最簡(jiǎn)單的開(kāi)始,如何創(chuàng)建一個(gè)DataFrame。
我們創(chuàng)建了一個(gè)dict,它的key是列名,value是一個(gè)list,當(dāng)我們將這個(gè)dict傳入DataFrame的構(gòu)造函數(shù)的時(shí)候,它將會(huì)以key作為列名,value作為對(duì)應(yīng)的值為我們創(chuàng)建一個(gè)DataFrame。
當(dāng)我們?cè)趈upyter輸出的時(shí)候,它會(huì)自動(dòng)為我們將DataFrame中的內(nèi)容以表格的形式展現(xiàn)。
我們也可以從一個(gè)numpy的二維數(shù)組來(lái)創(chuàng)建一個(gè)DataFrame,如果我們只是傳入numpy的數(shù)組而不指定列名的話,那么pandas將會(huì)以數(shù)字作為索引為我們創(chuàng)建列:
我們?cè)趧?chuàng)建的時(shí)候?yàn)閏olumns這個(gè)字段傳入一個(gè)string的list即可為它指定列名:
pandas另外一個(gè)非常強(qiáng)大的功能就是可以從各種格式的文件當(dāng)中讀取數(shù)據(jù)創(chuàng)建DataFrame,比如像是常用的excel、csv,甚至是數(shù)據(jù)庫(kù)也可以。
對(duì)于excel、csv、json等這種結(jié)構(gòu)化的數(shù)據(jù),pandas提供了專(zhuān)門(mén)的api,我們找到對(duì)應(yīng)的api進(jìn)行使用即可:
如果是一些比較特殊格式的,也沒(méi)有關(guān)系,我們使用read_table,它可以從各種文本文件中讀取數(shù)據(jù),通過(guò)傳入分隔符等參數(shù)完成創(chuàng)建。比如在上一篇驗(yàn)證PCA降維效果的文章當(dāng)中,我們從.data格式的文件當(dāng)中讀取了數(shù)據(jù)。該文件當(dāng)中列和列之間的分隔符是空格,而不是csv的逗號(hào)或者是table符。我們通過(guò)傳入sep這個(gè)參數(shù),指定分隔符就完成了數(shù)據(jù)的讀取。
這個(gè)header參數(shù)表示文件的哪些行作為數(shù)據(jù)的列名,默認(rèn)header=0,也即會(huì)將第一行作為列名。如果數(shù)據(jù)當(dāng)中不存在列名,需要指定header=None,否則會(huì)產(chǎn)生問(wèn)題。我們很少會(huì)出現(xiàn)需要用到多級(jí)列名的情況,所以一般情況下最常用的就是取默認(rèn)值或者是令它等于None。
在所有這些創(chuàng)建DataFrame的方法當(dāng)中最常用的就是最后一種,從文件讀取。因?yàn)槲覀冏鰴C(jī)器學(xué)習(xí)或者是參加kaggle當(dāng)中的一些比賽的時(shí)候,往往數(shù)據(jù)都是現(xiàn)成的,以文件的形式給我們使用,需要我們自己創(chuàng)建數(shù)據(jù)的情況很少。如果是在實(shí)際的工作場(chǎng)景,雖然數(shù)據(jù)不會(huì)存在文件當(dāng)中,但是也會(huì)有一個(gè)源頭,一般是會(huì)存儲(chǔ)在一些大數(shù)據(jù)平臺(tái)當(dāng)中,模型從這些平臺(tái)當(dāng)中獲取訓(xùn)練數(shù)據(jù)。
所以總體來(lái)說(shuō),我們很少使用其他創(chuàng)建DataFrame的方法,我們有所了解,著重掌握從文件讀取的方法即可。
下面介紹一些pandas的常用操作,這些操作是我在沒(méi)有系統(tǒng)學(xué)習(xí)pandas的使用方法之前就已經(jīng)了解的。了解的原因也很簡(jiǎn)單,因?yàn)樗鼈兲S昧?,可以說(shuō)是必知必會(huì)的常識(shí)性?xún)?nèi)容。
我們?cè)趈upyter當(dāng)中執(zhí)行運(yùn)行DataFrame的實(shí)例會(huì)為我們打出DataFrame中所有的數(shù)據(jù),如果數(shù)據(jù)行數(shù)過(guò)多,則會(huì)以省略號(hào)的形式省略中間的部分。對(duì)于數(shù)據(jù)量很大的DataFrame,我們一般不會(huì)直接這樣輸出展示,而是會(huì)選擇展示其中的前幾條或者是后幾條數(shù)據(jù)。這里就需要用到兩個(gè)api。
展示前若干條數(shù)據(jù)的方法叫做head,它接受一個(gè)參數(shù),允許我們制定讓它從頭開(kāi)始展示我們指定條數(shù)的數(shù)據(jù)。
既然有展示前面若干條自然也有展示最后若干條的api,這樣的api叫做tail。通過(guò)它我們可以查看DataFrame最后指定條數(shù)的數(shù)據(jù):
前面我們?cè)?jīng)提到過(guò),對(duì)于DataFrame而言,它其實(shí)相當(dāng)于Series組合成的dict。既然是dict我們自然可以根據(jù)key值獲取指定的Series。
DataFrame當(dāng)中有兩種方法獲取指定的列,我們可以通過(guò).加列名的方式或者也可以通過(guò)dict查找元素的方式來(lái)查詢(xún):
我們也可以同時(shí)讀取多列,如果是多列的話,只支持一種方法就是通過(guò)dict查詢(xún)?cè)氐姆椒?。它允許接收傳入一個(gè)list,可以查找出這個(gè)list當(dāng)中的列對(duì)應(yīng)的數(shù)據(jù)。返回的結(jié)果是這些新的列組成的新DataFrame。
我們可以用del刪除一個(gè)我們不需要的列:
我們要?jiǎng)?chuàng)建一個(gè)新的列也很簡(jiǎn)單,我們可以像是dict賦值一樣,直接為DataFrame賦值即可:
賦值的對(duì)象并不是只能是實(shí)數(shù),也可以是一個(gè)數(shù)組:
我們要修改某一列也非常簡(jiǎn)單,也是通過(guò)賦值一樣的方法覆蓋原數(shù)據(jù)即可。
有時(shí)候我們使用pandas不方便,想要獲取它對(duì)應(yīng)的原始數(shù)據(jù),可以直接使用.values獲取DataFrame對(duì)應(yīng)的numpy數(shù)組:
由于在DataFrame當(dāng)中每一列單獨(dú)一個(gè)類(lèi)型,而轉(zhuǎn)化成numpy的數(shù)組之后所有數(shù)據(jù)共享類(lèi)型。那么pandas會(huì)為所有的列找一個(gè)通用類(lèi)型,這就是為什么經(jīng)常會(huì)得到一個(gè)object類(lèi)型的原因。所以在使用.values之前最好先查看一下類(lèi)型,保證一下不會(huì)因?yàn)轭?lèi)型而出錯(cuò)。
感謝各位的閱讀!看完上述內(nèi)容,你們對(duì)如何使用pandas中DataFrame進(jìn)行數(shù)據(jù)處理大概了解了嗎?希望文章內(nèi)容對(duì)大家有所幫助。如果想了解更多相關(guān)文章內(nèi)容,歡迎關(guān)注億速云行業(yè)資訊頻道。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。