第五課內容: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的字典
這就是在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在數據過濾和分組運算中起到作用
來吧!又是一個新詞匯!記下來哦!
DataFrame是二維的數據,Series是一維數據,是一個數列類型。Series 可以看作是DataFrame 表格中的某一列。
也是一樣的套路,先定義一個函數,賦值 series ,在等號右邊的 pd.Series 的 Series 一定要大寫,和上面的 DataFrame 一樣,D 和 F 要大寫,可能是因為程序智能識別大寫首字母這些詞匯的含義,小寫可能就不能識別那一層特殊功能了。 ?呃,有魔法和沒魔法的區別 ??吧~
其中 14 語句中,第一列和上面的例子一樣,一旦沒有重新賦值,默認的索引就是 0,1,2,3這樣排列下來的。在 15 語句中,用 index 重新賦值后,列的表頭內容就出現變化了。
# 當我們使用點操作符來查看一個變量時,返回的是一個pandas series
# 在后續的布爾篩選中使用點方法可以簡化代碼
# US,...,UK是索引
其實到這一步也是出了很多錯。在前面定義有歧義,導致這一步查找GDP的數據時,出現的全是NaN這個代號:
往上查看,從某一步開始數值都已經是這樣了,但是我竟然也沒發現。就是從這里開始的:
全部重新打一遍,也是沒發現出問題,但是輸出全部都是錯誤提醒啊,來,感受一下滿屏的錯誤提示:
發去群里求助,老師讓我把從頭開始的代碼都給他看,然后發現問題在最初的定義賦值,或者GDP大小寫開始。因為前面字典定義的GDP是小寫的,后面為了和行首內容字母大寫相一致,就直接修改行首內容,導致的結果就是程序識別不了 GDP=gdp 的數值。所以只能顯示 “NaN”。
老師說這種情況,要不在創建的時候就和字典一致,要不在字典創建之后,使用 gdp_df.columns=[ ] 的形式對列名進行修改。
這是需要取gdp這一列數據的語法,在 Series 中直接就是后綴加“ .索引” 的形式得出數據。
和之前的課一樣的套路,需要分辨數據類型的時候,還是用 type 這個詞匯實現魔法啊~~
也可以用后綴加 index 直接得出 gdp 這一列對應的索引,也就是列的行首內容。在這里 gdp 對應的就是國家。
在 gdp 這一列,有哪些數值是大于 4 的,大于 4 的用 True 表示,不大于 4 的用 False 表示。
老師說這樣的應用在后面會經常用到喲~
# 我們也可以將series視為一個長度固定且有順序的字典,一些用于字典的函數也可以用于series
先創建一個字典,通過字典創建一個 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個中括號和沒有中括號的區別。
這個我的理解是,在 gdp 這個DataFrame 的表格中,找出 Country 這個列的數據內容。這個用法不限于一列,要是想要顯示更多列,也是一樣的用法:
下面顯示一個中括號的運算。
同樣的內容, 23 條是DataFrame 類型, 24 條是 Series 類型,我們可以用 type 這個詞匯來判斷數據類型:
我們再來看看 df.column_name 這樣的格式,出來的結果:
以上三種,就是:
df [ ['column_name'] ] —— 選取列,生成DataFrame 格式數據(如果只是用 [ ] 則產生一個series);
df [ 'column_name' ] —— 選取列,生成 Series 格式數據;
df.column_name —— 選取列,生成 Series 格式數據。
都是通過以上句型來選取列的數據內容。
覺得這個和以前學英語差不多?。∮泦卧~,記句型,注意括號使用的語法。。。都是一個套路??
上面講的是列的索引,要是我們需要行的數據呢?
中括號里面寫的是行所對應的數值索引,這有點像之前學的切片:
loc方法
是一種基于行標簽和列標簽選取數據的方法
可以選取特定行或列,也可以同時指定所需要的行與列
和二維numpy array的格式非常類似
我們先來一個例子,需要 JP 和 DE 的行數據時,df.loc[ ] —— 使用行和列的標簽索引選取數據:
要是我們除了想要特定的行數據,還想要特定的列,就在行的索引方括號后面加 逗號和列的索引就可以了:
增加的索引值是標簽數據,也就是對應的字符串。loc方法正是基于標簽選取數據的方法。
要是需要整一行的數據,和之前學的切片里面的公式語句差不多,用冒號來表示:
iloc方法
和loc方法不同的地方是,iloc是基于行列索引進行數據選擇而不是標簽
具體使用方法和loc類似,用行/列索引代替標簽
在一個表格中,想要得到其中某行的數據,用 df.iloc[ ] 這樣的句型,來進行行和列的數值索引選取數據:
要是想要得到特定的列的數據呢? 套路都一樣,直接后面加方括號,里面填對應的列的數字:
使用布爾索引(boolean Indexing)篩選數據
我們可以使用pandas series來獲取一個boolean series
布爾索引的使用和二維numpy array類似
可以結合 [ ] 或者loc一起使用
老師說前面給我們留下了一個布爾型索引沒有后文,如下圖的 36 條:
要在一個表格之內找到洲所在是 Asia 的,用布爾型判斷有哪些是符合,哪些是不符合的。
37 條用句型套用,得出數據表格,內容是,符合 Continent 在 Asia 的國家有 CN 和 JP ,所對應的行內容全部顯示出來。
這個時候,我們套用 loc 句型,得出的結果是一樣的:
再來一個例子吧~
我們要在表格里面找到所在大洲是歐洲,并且GDP是要大于3的那個國家數據,首先用布爾型看數據符合還是不符合:
這里可以看到,只有 DE 這個數值才符合要求。我們看句型中,要是需要兩個或兩個以上的條件要同時滿足,需要用到 & 這個符號,代表優先級,也就是同時運算。
然后用 DataFrame 這個句型進行運算,得到符合條件的整行數據:
還有鳶尾花數據這個大案例,留在下一篇文章啦!
作業5-1:
選出亞洲或者北美洲的國家記錄 (提示:使用 isin 方法)
選出gdp大于4兆億美元的國家