在我看來(lái),對(duì)于Numpy以及Matplotlib,Pandas可以幫助創(chuàng)建一個(gè)非常牢固的用于數(shù)據(jù)挖掘與分析的基礎(chǔ)。而Scipy(會(huì)在接下來(lái)的帖子中提及)當(dāng)然是另一個(gè)主要的也十分出色的科學(xué)計(jì)算庫(kù),但是我認(rèn)為前三者才是真正的Python科學(xué)計(jì)算的支柱。
所以,不需要太多精力,讓我們馬上開(kāi)始Python科學(xué)計(jì)算系列的第三帖——Pandas。
導(dǎo)入Pandas
我們首先要導(dǎo)入我們的演出明星——Pandas。
Pandas的數(shù)據(jù)類型
Pandas基于兩種數(shù)據(jù)類型:series與dataframe。
一個(gè)series是一個(gè)一維的數(shù)據(jù)類型,其中每一個(gè)元素都有一個(gè)標(biāo)簽。如果你閱讀過(guò)這個(gè)系列的關(guān)于Numpy的文章,你就可以發(fā)現(xiàn)series類似于Numpy中元素帶標(biāo)簽的數(shù)組。其中,標(biāo)簽可以是數(shù)字或者字符串。
一個(gè)dataframe是一個(gè)二維的表結(jié)構(gòu)。Pandas的dataframe可以存儲(chǔ)許多種不同的數(shù)據(jù)類型,并且每一個(gè)坐標(biāo)軸都有自己的標(biāo)簽。你可以把它想象成一個(gè)series的字典項(xiàng)。
將數(shù)據(jù)導(dǎo)入Pandas
在我們開(kāi)始挖掘與分析之前,我們首先需要導(dǎo)入能夠處理的數(shù)據(jù)。幸好,Pandas在這一點(diǎn)要比Numpy更方便。
在這里我推薦你使用自己所感興趣的數(shù)據(jù)集來(lái)使用。你的或其他國(guó)家的政府網(wǎng)站上會(huì)有一些好的數(shù)據(jù)源。例如,你可以搜索英國(guó)政府?dāng)?shù)據(jù)或美國(guó)政府?dāng)?shù)據(jù)來(lái)獲取數(shù)據(jù)源。當(dāng)然,Kaggle是另一個(gè)好用的數(shù)據(jù)源。
在此,我將采用英國(guó)政府?dāng)?shù)據(jù)中關(guān)于降雨量數(shù)據(jù),因?yàn)樗麄兪忠子谙螺d。此外,我還下載了一些日本降雨量的數(shù)據(jù)來(lái)使用。
將你的數(shù)據(jù)準(zhǔn)備好以進(jìn)行挖掘和分析
現(xiàn)在我們已經(jīng)將數(shù)據(jù)導(dǎo)入了Pandas。在我們開(kāi)始深入探究這些數(shù)據(jù)之前,我們一定迫切地想大致瀏覽一下它們,并從中獲得一些有用信息,幫助我們確立探究的方向。
想要快速查看前x行數(shù)據(jù):
你將獲得一個(gè)類似下圖一樣的表:
你將獲得類似下圖的表
你將獲得同之前一樣的數(shù)據(jù),但是列名已經(jīng)變了:
此外,你可能需要知道你數(shù)據(jù)的一些基本的統(tǒng)計(jì)信息。Pandas讓這件事變得非常簡(jiǎn)單。
過(guò)濾
當(dāng)你查看你的數(shù)據(jù)集時(shí),你可能希望獲得一個(gè)特殊的樣本數(shù)據(jù)。例如,如果你有一個(gè)關(guān)于工作滿意度的問(wèn)卷調(diào)查數(shù)據(jù),你可能想要獲得所有在同一行業(yè)或同一年齡段的人的數(shù)據(jù)。
Pandas為我們提供了多種方法來(lái)過(guò)濾我們的數(shù)據(jù)并提取出我們想要的信息。有時(shí)候你想要提取一整列??梢灾苯邮褂昧袠?biāo)簽,非常容易。
還記得我所說(shuō)的命名列標(biāo)簽的注意事項(xiàng)嗎?不使用空格和橫線等可以讓我們以訪問(wèn)類屬性相同的方法來(lái)訪問(wèn)列,即使用點(diǎn)運(yùn)算符。
如果你讀過(guò)這一系列中Numpy那一篇帖子,你可能會(huì)記得一項(xiàng)技術(shù)叫做‘boolean masking’,即我們可以在數(shù)組上運(yùn)行一個(gè)條件語(yǔ)句來(lái)獲得對(duì)應(yīng)的布爾值數(shù)組。好,我們也可以在Pandas中做同樣的事。
我們也可以使用這些條件表達(dá)式來(lái)過(guò)濾一個(gè)已知的dataframe。
值得注意的是,由于操作符優(yōu)先級(jí)的問(wèn)題,在這里你不可以使用關(guān)鍵字‘a(chǎn)nd’,而只能使用’&’與括號(hào)
前幾部分為我們展示了如何通過(guò)列操作來(lái)獲得數(shù)據(jù)。實(shí)際上,Pandas同樣有標(biāo)簽化的行操作。這些行標(biāo)簽可以是數(shù)字或是其他標(biāo)簽。獲取行數(shù)據(jù)的方法也取決于這些標(biāo)簽的類型。
如果你的行有數(shù)字索引,你可以使用iloc引用他們:
可能在你的數(shù)據(jù)集里有年份的列,或者年代的列,并且你希望可以用這些年份或年代來(lái)索引某些行。這樣,我們可以設(shè)置一個(gè)(或多個(gè))新的索引。
ix是另一個(gè)常用的引用一行的方法。那么,如果loc是字符串標(biāo)簽的索引方法,iloc是數(shù)字標(biāo)簽的索引方法,那什么是ix呢?事實(shí)上,ix是一個(gè)字符串標(biāo)簽的索引方法,但是它同樣支持?jǐn)?shù)字標(biāo)簽索引作為它的備選。
既然ix可以完成loc和iloc二者的工作,為什么還需要它們呢?最主要的原因是ix有一些輕微的不可預(yù)測(cè)性。還記得我說(shuō)數(shù)字標(biāo)簽索引是ix的備選嗎?數(shù)字標(biāo)簽可能會(huì)讓ix做出一些奇怪的事情,例如將一個(gè)數(shù)字解釋成一個(gè)位置。而loc和iloc則為你帶來(lái)了安全的、可預(yù)測(cè)的、內(nèi)心的寧?kù)o。然而必須指出的是,ix要比loc和iloc更快。
通常我們都希望索引是整齊有序地。我們可以在Pandas中通過(guò)調(diào)用sort_index來(lái)對(duì)dataframe實(shí)現(xiàn)排序。
對(duì)數(shù)據(jù)集應(yīng)用函數(shù)
有時(shí)候你會(huì)想以某些方式改變或是操作你數(shù)據(jù)集中的數(shù)據(jù)。例如,如果你有一列年份的數(shù)據(jù)而你希望創(chuàng)建一個(gè)新的列顯示這些年份所對(duì)應(yīng)的年代。Pandas對(duì)此給出了兩個(gè)非常有用的函數(shù),apply和applymap。
操作一個(gè)數(shù)據(jù)集結(jié)構(gòu)
另一件經(jīng)常會(huì)對(duì)dataframe所做的操作是為了讓它們呈現(xiàn)出一種更便于使用的形式而對(duì)它們進(jìn)行的重構(gòu)。
首先,groupby:
合并數(shù)據(jù)集
有時(shí)候你有兩個(gè)單獨(dú)的數(shù)據(jù)集,它們直接互相關(guān)聯(lián),而你想要比較它們的差異或者合并它們。沒(méi)問(wèn)題,Pandas可以很容易實(shí)現(xiàn):
如下你可以看到,兩個(gè)數(shù)據(jù)集在年份這一類上已經(jīng)合并了。rain_jpn數(shù)據(jù)集僅僅包含年份以及降雨量。當(dāng)我們以年份這一列進(jìn)行合并時(shí),僅僅’jpn_rainfall’這一列和我們UK雨量數(shù)據(jù)集的對(duì)應(yīng)列進(jìn)行了合并。
采用Pandas快速繪制圖表
Matplotlib很好用,但是想要畫(huà)出一個(gè)中途下降的圖表還是需要費(fèi)一番功夫的。而有的時(shí)候你僅僅想要快速畫(huà)出一個(gè)數(shù)據(jù)的大致走勢(shì)來(lái)幫助你發(fā)掘搞清這些數(shù)據(jù)的意義。Pandas提供了plot函數(shù)滿足你的需求:
存儲(chǔ)你的數(shù)據(jù)集
在清理、重構(gòu)以及挖掘完你的數(shù)據(jù)后,你通常會(huì)剩下一些非常重要有用的東西。你不僅應(yīng)當(dāng)保留下你的原始數(shù)據(jù),也同樣需要保存下你最新處理過(guò)的數(shù)據(jù)集。
上述代碼會(huì)將你的數(shù)據(jù)存入一個(gè)csv文件以備下次使用。
到此為止,我們簡(jiǎn)單介紹了Pandas。正如我之前說(shuō)的,Pandas是非常好用的庫(kù),而我們僅僅是接觸了一點(diǎn)皮毛。但是我希望通過(guò)我的介紹,你可以開(kāi)始進(jìn)行真正的數(shù)據(jù)清理與挖掘工作了。
像往常一樣,我非常希望你能盡快開(kāi)始嘗試Pandas。找一兩個(gè)你喜歡的數(shù)據(jù)集,開(kāi)一瓶啤酒,坐下來(lái),然后開(kāi)始探索你的數(shù)據(jù)吧。這確實(shí)是唯一的熟悉Pandas以及其他這一系列文章中提到的庫(kù)的方式。再加上你永遠(yuǎn)不知道的,你會(huì)找到一些你感興趣的東西的。
-
數(shù)據(jù)
+關(guān)注
關(guān)注
8文章
7256瀏覽量
91897 -
series
+關(guān)注
關(guān)注
0文章
17瀏覽量
12813 -
python
+關(guān)注
關(guān)注
56文章
4827瀏覽量
86774
原文標(biāo)題:Python科學(xué)計(jì)算之Pandas
文章出處:【微信號(hào):magedu-Linux,微信公眾號(hào):馬哥Linux運(yùn)維】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
評(píng)論