文科生學Python系列9: Pandas入門

第五課內容:Pandas入門

pandas DataFrame(數據框)

pandas Series

數據的選擇

案例:Iris 鳶尾花數據

? ? ? ? 數據的導入和觀察

? ? ? ? 數據選擇復習

? ? ? ? 數據可視化初探


Pandas DataFrame

我們存儲數據最常用的形式是表格

表格就是由行與列所構成的一種有序的組織形式

表格的第一行一般是變量名稱,也稱為表頭(header)

不同的變量可以是不同的數據類型。

比如下面這個表格羅列了2016年GDP最高的5個國家以及對應的首都,人口(百萬),GDP(萬億美元),和所在大洲

問題:如何在python中表示以上這個表格?

思考思路:

在第四節課中,我們介紹了二維numpy array。但是numpy array只能存儲一種數據類型,但是上面的表格同時有數值變量和字符串,

——>所以我們需要使用pandas包來處理,

——>pandas是數據科學中最常用的包之一,可以高效的處理各種數據格式。也因為 pandas是基于numpy構建的。

我們將重點介紹pandas中的series和DataFrame

從字典創建一個DataFrame

回憶第三節課程,我們需要鍵(key)和值(value)來定義一個字典

# 首先產生一個叫gdp的字典

產生一個叫gdp的字典

這就是在Python中顯示的表格啦!簡潔美觀!

記得每一次運行都要記得重新賦值 import pandas as pd ,不然后面是沒有辦法運行沒有被定義的代碼的。

這里的套路是:首先要定義一個叫gdp的字典名稱,DataFrame是一個有魔法的固定詞匯,數據表格的意思,也就是用它來賦值代碼,輸出的結果是一個表格,這可是在python中的表格~?

gdp_df=pd.DataFrame(gdp),在pandas里面,強制轉換gdp這個字典為DataFrame的格式,等同于 被賦值的gdp的DataFrame數據表格。我的理解啊~??

首行加黑加粗的是表頭,主體部分就是我們定義的數據內容了。

細心的人會發現,這里的表格的表頭內容排列順序和代碼復制的內容順序是不一樣的,賦值的時候前面是country,capital,population,在形成的表格前面的是capital,continent,country。所以我們要是需要順序一致的時候,應該怎么辦呢?

如圖:

表格行首內容順序與代碼一致

需要加 columns 這個名詞,把順序強調一遍,輸出的結果就是和代碼順序一樣的表格行首啦!也就是,使用column選項可以選擇列的順序

接下來,我們也可以通過index選項添加自定義的行標簽(label)

把第一列的數字改成國家縮寫小寫

修改行和列的標簽

修改內容

這里通過 index 和 columns 的索引修改相應的內容,把黑體的內容首字母全部換成大寫了。

其實就是,要是需要修改表格內的內容,要在代碼行重新輸入新的值,然后運行就能修改Python表格中的內容了。

增加一列數據

增加數據

這個表格中增加的內容是表示這是GDP前5的數據,然后還有相對相應的國土面積。也就是在Python表格中增加數據的話,要在代碼行重新賦值一個表頭內容,然后一般是用字典的格式來定義主體內容,然后重新輸出表格,就能得出增加數據的Python表格來。

Pandas series

pandas中的series對象是另一個重要的數據結構

你可以將其視為一個一維的DataFrame或者一個一維數組(array)加上一個索引(index)

在這節課后半部分,我們將展示series在數據過濾和分組運算中起到作用

來吧!又是一個新詞匯!記下來哦!

Pandas series

DataFrame是二維的數據,Series是一維數據,是一個數列類型。Series 可以看作是DataFrame 表格中的某一列。

也是一樣的套路,先定義一個函數,賦值 series ,在等號右邊的 pd.Series 的 Series 一定要大寫,和上面的 DataFrame 一樣,D 和 F 要大寫,可能是因為程序智能識別大寫首字母這些詞匯的含義,小寫可能就不能識別那一層特殊功能了。 ?呃,有魔法和沒魔法的區別 ??吧~

其中 14 語句中,第一列和上面的例子一樣,一旦沒有重新賦值,默認的索引就是 0,1,2,3這樣排列下來的。在 15 語句中,用 index 重新賦值后,列的表頭內容就出現變化了。


# 當我們使用點操作符來查看一個變量時,返回的是一個pandas series

# 在后續的布爾篩選中使用點方法可以簡化代碼

# US,...,UK是索引

series取表格中一列的值

其實到這一步也是出了很多錯。在前面定義有歧義,導致這一步查找GDP的數據時,出現的全是NaN這個代號:

查找無數據,錯誤示范

往上查看,從某一步開始數值都已經是這樣了,但是我竟然也沒發現。就是從這里開始的:

出錯的輸出

全部重新打一遍,也是沒發現出問題,但是輸出全部都是錯誤提醒啊,來,感受一下滿屏的錯誤提示:

出錯提醒

發去群里求助,老師讓我把從頭開始的代碼都給他看,然后發現問題在最初的定義賦值,或者GDP大小寫開始。因為前面字典定義的GDP是小寫的,后面為了和行首內容字母大寫相一致,就直接修改行首內容,導致的結果就是程序識別不了 GDP=gdp 的數值。所以只能顯示 “NaN”。

老師說這種情況,要不在創建的時候就和字典一致,要不在字典創建之后,使用 gdp_df.columns=[ ] 的形式對列名進行修改。

這是需要取gdp這一列數據的語法,在 Series 中直接就是后綴加“ .索引” 的形式得出數據。

得出數據類型

和之前的課一樣的套路,需要分辨數據類型的時候,還是用 type 這個詞匯實現魔法啊~~

直接得出索引

也可以用后綴加 index 直接得出 gdp 這一列對應的索引,也就是列的行首內容。在這里 gdp 對應的就是國家。

返回一個布爾型的series

在 gdp 這一列,有哪些數值是大于 4 的,大于 4 的用 True 表示,不大于 4 的用 False 表示。

老師說這樣的應用在后面會經常用到喲~

用字典來創建Series

# 我們也可以將series視為一個長度固定且有順序的字典,一些用于字典的函數也可以用于series

先創建一個字典,通過字典創建一個 Series 數據。

# 判斷 ’US' 標簽是否在gdp_series中

判斷 ’US' 標簽是否在 gdp_series 中

數據的選擇

df [ ['column_name'] ] —— 選取列,生成DataFrame 格式數據(如果只是用 [ ] 則產生一個series);

df [ 'column_name' ] —— 選取列,生成 Series 格式數據;

df.column_name —— 選取列,生成 Series 格式數據


使用loc和iloc方法,選擇行和列:

df.loc[ ] —— 使用行和列的標簽索引選取數據

df.iloc[ ] ——使用行和列的數值索引選取數據


使用布爾索引篩選數據

這太多括號啦!看得有點暈,首先看選取列的三種方法,2個中括號,1個中括號和沒有中括號的區別。

df [ ['column_name'] ]

這個我的理解是,在 gdp 這個DataFrame 的表格中,找出 Country 這個列的數據內容。這個用法不限于一列,要是想要顯示更多列,也是一樣的用法:

選取 Country 和 gdp 這兩列

下面顯示一個中括號的運算。

df [ 'column_name' ]

同樣的內容, 23 條是DataFrame 類型, 24 條是 Series 類型,我們可以用 type 這個詞匯來判斷數據類型:

數據類型的顯示

我們再來看看 df.column_name 這樣的格式,出來的結果:

df.column_name

以上三種,就是:

df [ ['column_name'] ] —— 選取列,生成DataFrame 格式數據(如果只是用 [ ] 則產生一個series);

df [ 'column_name' ] —— 選取列,生成 Series 格式數據;

df.column_name —— 選取列,生成 Series 格式數據。

都是通過以上句型來選取列的數據內容。

覺得這個和以前學英語差不多?。∮泦卧~,記句型,注意括號使用的語法。。。都是一個套路??

上面講的是列的索引,要是我們需要行的數據呢?

中括號里面寫的是行所對應的數值索引,這有點像之前學的切片:

行的數據選取

loc方法

是一種基于行標簽和列標簽選取數據的方法

可以選取特定行或列,也可以同時指定所需要的行與列

和二維numpy array的格式非常類似

我們先來一個例子,需要 JP 和 DE 的行數據時,df.loc[ ] —— 使用行和列的標簽索引選取數據:

df.loc[ ] —— 使用行和列的標簽索引選取數據

要是我們除了想要特定的行數據,還想要特定的列,就在行的索引方括號后面加 逗號和列的索引就可以了:

df.loc[ ] —— 使用行和列的標簽索引選取數據

增加的索引值是標簽數據,也就是對應的字符串。loc方法正是基于標簽選取數據的方法。

要是需要整一行的數據,和之前學的切片里面的公式語句差不多,用冒號來表示:

df.loc[ ] —— 使用行和列的標簽索引選取數據

iloc方法

和loc方法不同的地方是,iloc是基于行列索引進行數據選擇而不是標簽

具體使用方法和loc類似,用行/列索引代替標簽

在一個表格中,想要得到其中某行的數據,用 df.iloc[ ] 這樣的句型,來進行行和列的數值索引選取數據:

df.iloc[ ] ——使用行和列的數值索引選取數據

要是想要得到特定的列的數據呢? 套路都一樣,直接后面加方括號,里面填對應的列的數字:

df.iloc[ ] ——使用行和列的數值索引選取數據

使用布爾索引(boolean Indexing)篩選數據

我們可以使用pandas series來獲取一個boolean series

布爾索引的使用和二維numpy array類似

可以結合 [ ] 或者loc一起使用

老師說前面給我們留下了一個布爾型索引沒有后文,如下圖的 36 條:

使用布爾索引(boolean Indexing)篩選數據

要在一個表格之內找到洲所在是 Asia 的,用布爾型判斷有哪些是符合,哪些是不符合的。

37 條用句型套用,得出數據表格,內容是,符合 Continent 在 Asia 的國家有 CN 和 JP ,所對應的行內容全部顯示出來。

這個時候,我們套用 loc 句型,得出的結果是一樣的:

使用布爾索引(boolean Indexing)篩選數據

再來一個例子吧~

我們要在表格里面找到所在大洲是歐洲,并且GDP是要大于3的那個國家數據,首先用布爾型看數據符合還是不符合:

使用布爾索引(boolean Indexing)篩選數據

這里可以看到,只有 DE 這個數值才符合要求。我們看句型中,要是需要兩個或兩個以上的條件要同時滿足,需要用到 & 這個符號,代表優先級,也就是同時運算。

然后用 DataFrame 這個句型進行運算,得到符合條件的整行數據:

使用布爾索引(boolean Indexing)篩選數據

還有鳶尾花數據這個大案例,留在下一篇文章啦!


作業5-1:

選出亞洲或者北美洲的國家記錄 (提示:使用 isin 方法)

選出gdp大于4兆億美元的國家

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,460評論 6 538
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,067評論 3 423
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事?!?“怎么了?”我有些...
    開封第一講書人閱讀 177,467評論 0 382
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,468評論 1 316
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,184評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,582評論 1 325
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,616評論 3 444
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,794評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,343評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,096評論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,291評論 1 371
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,863評論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,513評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,941評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,190評論 1 291
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,026評論 3 396
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,253評論 2 375

推薦閱讀更多精彩內容