關於Python的數據分析,當我們遇到的數據量小、數據結構簡單時,可以通過字典、列表等Python常見的數據結構來處理。但是當我們面對的大量數據以及複雜數據的局面時,就需要用一些專門用於數據分析的擴展庫來處理數據了。
今天給大家介紹一個Python裡專門用來做數據分析和處理的擴展庫。
pandas(pannel data analysis,面板數據分析),我個人覺得pandas用於數據分析處理有別於Python字典和列表的主要在於以下三點。
運算效率提升,pandas是基於numpy寫的,換句話說也是c語言進行編寫並編譯成本地庫的,在運算效率會高很多。消耗資源少,因為pandas採用矩陣運算,在算法結構上比列表和字典組合數據消耗更少資源。pandas的矩陣運算可以幫我們結構化成表格數據,省去大量自己拼接表格數據的代碼開銷。
本章知識點:
pandas 安裝和使用pandas 數據結構(Series)pandas 數據結構(DataFrame)
pandas 安裝和使用
通過 pip install pandas可以直接安裝安裝pandas和相關聯的庫。
提示安裝成功之後我們嘗試在編輯器裡 import pandas 並運行,沒有報錯即視為安裝pandas庫成功。
數據結構(Series)
Series是pandas兩個重要數據結構中的其中一個,Series的中文意思為(一系列;連續;接連)。它其實是一個一維數組和另一個一維數組(數據對應的索引index)相結合產生的一個數據結構。
一維數組長什麼樣呢?
[1,2,3,4]這個列表就是一個一維數組。
[[1,2,3,4], [2,3,4,5]]這個列表就是一個二維數組,以此類推。
現在我們通過Series來創建一組數據。
以上三行代碼揭示了如何創建一個Series數據結構。
首先引入pandas的Series包,Series本身也是作為一個類存在的。通過給Series類傳入一個列表(list),得到它的實例化對象,賦值給變量series最後輸出series對象,我們會發現它自動在列表的每一個元素前面加上了索引Series數據結構有什麼實用價值?
Series可以用來存儲一行或一列數據,以及與其相關的索引集合
簡單的說,當我們有一個一維數組數據時,可以通過Series快速方便的幫我們給它加上索引,便於查詢和使用。
大家可以想像成Series可以把一個列表變成一個字典進行訪問。
參考一下例子:
大家可以通過上面的代碼發現:
我們可以通過values直接取出series的所有值,實際上就是一個數組。通過對series取元素key名的方式( series[0] )可以獲得具體的值。可以將series作為一個字典進行遍歷,取出其所有的Key和Value。有朋友可能會疑惑一個問題,series[0]究竟是取的下標位置還是取的Key名?其實我們取的是Key名,因為我們在實例化Series時默認只傳了一個列表參數,所以系統自動幫我們加上了從0開始的key名,現在我們試試自定義Series的Index參數。
Series在實例化時可以接受兩個參數,第一個是值的序列,第二個是索引的序列。
想想我們開始怎麼介紹Series的?Series其實是一個一維數組和另一個一維數組(數據對應的索引index)相結合產生的一個數據結構。
通過字典創建Series
我們同樣可以用字典來創建一個Series,因為它的數據結構和Series的數據結構天然吻合。
如上圖代碼所示,我們在實例化Series時傳一個字典數據進去即可。
Series修改數據
現在我們想設計這麼一個數據結構。
dic1 = {"呂布":100 ,"關羽":100 ,"張飛":100 }
dic2 = {"呂布":100 ,"關羽":100 ,"張飛":100 }
用兩個字典來分別定義三個武將的生命值,然後希望把這兩個字典裡相同key的值進行相加,看看會得到什麼樣的結果。
通過兩個series相加,我們得到了想要的數據。
數據結構(DataFrame)
在pandas中,DataFrame是一個類似於表格的數據結構,它的索引包括 列索引和行索引,包含有一組有序的列,每個列都可以是不同的數據類型(數字、字符串等等)。
簡單的說就是 DataFrame的每一行和每一列都是由Series組成的。
現在讓我們來定義個DataFrame:
通過以上代碼我們利用一個簡單的字典數據結構創建了一個DataFrame,輸出內容也像極了表格。
第一列默認是行號索引,第二列到第四列分別是我們之前定義的數據。
開始我們講到在DataFrame中每一行或者每一列數據都是一個Series,現在我們通過以下代碼來驗證這個說法。
如上圖所示,我們通過對DataFrame對象取key名的方式得到一個Series對象,然後就可以對Series對象進行各種操作了。
修改DataFrame的數據
現在我們希望把所有人的生命值都調整到100,參考下列代碼。
如上圖所示,通過對 df[Key名]的內容進行直接賦值,可以修改整個Series的值。
我們同樣可以用 df.生命值 = 100的語法來進行賦值,DataFrame已經自動幫我們把Key名轉換為對象的屬性了。
導出DataFrame表格數據
如果我們希望將DataFrame的數據導出成表格文件,pandas也同樣支持,我們可以通過很簡單的語法即可實現。
DataFrame.to_csv(文件名)即可將數據導出為一個csv文件。
讓我們來看看導出文件在表格軟體裡的展現。
一般情況下,我們只能通過DataFrame進行csv文件的導出,不支持對Series導出。
總結:
今天給大家簡單介紹了pandas兩種數據結構Series、DataFrame的用處,這對於我們如何理解pandas進行數據分析是一個好的開始,不過對於完整的學習pandas來說還遠遠不夠,我們將在以後的章節裡繼續學習pandas的各種知識,把它變成我們的數據分析利器,更好的應用於工作當中。
文章最後我會用一個思維導圖來總結本章的知識點:
歡迎關注我 「紙飛機編程」,獲取更多有趣的Python編程信息。