Pandas是一個使用Python創建和處理結構化數據的庫。什麼是結構化?其實就是按行和列組織的表格數據,就像你在Excel電子表格或SQL數據庫中找到的那樣。數據科學家、分析師、程序員和工程師等都將利用它來提取所需的數據。
Pandas僅限於“小數據”(這裡說的“小”是指數據可以容納在單臺機器的內存中)。但是,其語法和操作已被其他項目采用或啟發了它們的應用,這些項目包括PySpark、Dask、Modin、cuDF、Baloo、Dexplo、Tabel、StaticFrame等。這些項目有不同的目標,但其中一些將擴展到大數據。因此,Pandas的功能使它逐漸成為與結構化數據進行交互的事實上的API,在這種情況下,了解Pandas的工作原理是很有必要也很有價值的。
本書作者之一Matt Harrison經營著一家負責企業培訓的公司,其主營業務是為想要提高Python和數據處理技能水平的大型公司提供人員培訓服務。因此,這些年來,他已經教會了成千上萬的人使用Python和Pandas。編寫本書的目的是幫助許多人更好地理解和應 用Pandas,破解他們的迷惑。盡管Pandas優點不少,但也有一些難解或令人困惑的地方。本書將詳細介紹有關Pandas中的各種操作,指導讀者了解可能遇到的一些難點,以便能夠真正掌握和處理它們。
本書讀者
本書以操作秘笈的形式編寫,包含近100個秘笈,從非常簡單的應用到高級操作技巧都有涵蓋。所有秘笈力求以清晰、簡潔、現代的慣用Pandas代碼編寫。“實戰操作”部分詳細介紹各個秘笈的操作步驟,“原理解釋”部分對秘笈的每一步都進行非常詳細的闡釋。絕大多數秘笈還提供“擴展知識”部分,使讀者能夠舉一反三,發展出自己的操作技巧。本書包含大量的Pandas代碼,並提供了配套的源數據文件,以便讀者跟隨操作和對照學習。
概括而言,前7章中的秘笈比後面7章中的Pandas操作更簡單,並更著重於Pandas的基礎應用,而後7章的重點則是更高級的操作技巧,並且更多地以項目為導向。由於本書涵蓋的範圍和難度都較廣,因此對新手和日常用戶都有用。根據我們的經驗,即使是經常使用Pandas的人也可能並未掌握其很多編碼技巧。這也和Pandas本身的特性有關,因為幾乎總是有多種方法可以完成相同的操作。但是,如果讀者不熟悉Pandas的話,那麼采用的方法可能是效率的。對於同一個問題,兩個Pandas解決方案之間在性能上相差一個數量級,這種情況並不罕見。
閱讀本書需要掌握一定的Python基礎知識。我們假定讀者熟悉Python中所有常見的內置數據容器,如列表、集合、組。
內容介紹
本書共包含14章,具體內容如下。
第1章“Pandas基礎”,詳細介紹Pandas的兩個數據結構,即Series和DataFrame。此外,還解釋它們的組成部分和相關術語。數據的每一列必須僅具有一種數據類型,並且每種數據類型都被涵蓋。對此,本章詳細討論每種數據類型,並介紹如何使用方法鏈等操作。
第2章“DataFrame基本操作”,重點介紹數據分析人員在數據分析期間執行的關鍵和典型的操作。
第3章“創建和保留DataFrame”,討論提取數據和創建DataFrame的各種方法,包括讀取CSV文件、Excel電子表格、JSON格式數據和HTML表格等。
第4章“開始數據分析”,介紹在讀入數據之後應該開始執行的操作,例如通過更改數據類型減少內存使用量、從中選擇小、通過排序選擇每個組中的值和計算追蹤止損單價格等,這些都是比較實用的技巧。
第5章“探索性數據分析”,介紹用於比較數字數據和分類數據的基本分析技術。本章還演示常見的可視化技術。
第6章“選擇數據子集”,介紹選擇數據的不同子集的多種方法,包括選擇Series數據、選擇DataFrame行、同時選擇DataFrame行和列、使用整數和標簽選擇數據、按字典序切片等,這些操作包含一定的技巧,粗心的用戶可能會感到困惑。
第7章“過濾行”,介紹查詢數據以基於布爾條件選擇數據子集的過程,包括構造多個布爾條件、用布爾數組過濾、使用查詢方法提高布爾索引的可讀性,以及使用布爾值、整數位置和標簽進行選擇等。
第8章“對齊索引”,主要討論非常重要但卻經常被誤解的索引對像。錯誤使用索引會導致許多錯誤的結果,本章中的秘笈演示如何正確使用索引來提供有力的結果。
第9章“分組以進行聚合、過濾和轉換”介紹強大的分組功能,這些功能在數據分析期間總是必需的。你可以構建自定義函數以應用於分組。
第10章“將數據重組為規整形式”,闡釋規整數據的定義及其重要性,並演示如何將許多不同形式的雜亂數據集轉換為規整數據集。
第11章“組合Pandas對像”,介紹許多可用於垂直或水平組合DataFrame和Series的方法,包括將新行追加到DataFrame、將多個DataFrame連接在一起以及連接到SQL數據庫等操作。此外,還詳細闡釋concat、join和merge方法之間的區別。
第12章“時間序列分析”,討論時間序列的強大功能,它使得分析人員可以按任何時間維度進行數據剖析。
第13章“使用Matplotlib、Pandas和Seaborn進行可視化”,本章主要介紹Matplotlib庫,該庫負責Pandas中的所有可視化繪圖。此外,還介紹Pandas繪圖方法以及Seaborn庫,Seaborn庫能夠產生Pandas中無法直接獲得的美觀的可視化效果。
第14章“調試和測試”,探討測試DataFrame和Pandas代碼的機制。如果你打算在生產環境中部署Pandas,那麼本章將幫助你建立對代碼的信心。本章介紹的具體操作包括轉換數據、測試.apply方法的性能、使用Dask、Pandarell和Swifter等提高.apply方法的性能、檢查代碼、在Jupyter中進行調試、管理數據的完整性、結合使用pytest和Pandas以及使用Hypothesis庫生成測試等。
充分利用本書
要充分利用本書,你也許需要執行以下操作。
首先,也是重要的,你應該下載本書所有代碼,這些代碼都被存儲在Jupyter Notebook中。閱讀每個秘笈時,請在Notebook中運行代碼的每個步驟。在運行代碼時,請確保自己進行更多的探索。
其次,在瀏覽器中打開Pandas官方說明文檔,其網址如下。
http://pandas.pydata.org/pandas-docs/stable/
Pandas說明文檔是一個很好的資源,其中包含超過1000頁的材料。在文檔中有大多數操作Pandas的示例,通常可以從See also(另請參閱)部分中直接鏈接它們。當然,它的缺陷是,雖然涵蓋了大多數基礎操作,但示例采用的卻是虛擬數據,這些虛擬數據並不能反映你在分析現實世界中的數據集時可能遇到的情況。
本書需要的軟件包
Pandas是用於Python編程語言的第三方程序包,在出版本書時,它的版本為1.0.1(目前,Python的版本為3.8)。本書中的示例在Python 3.6及更高版本中都應該可以正常工作。
你可以通過多種方式在計算機上安裝Pandas和本書提到的其餘庫,但是簡單的方法是安裝Anaconda發行版。該版本由Anaconda創建,將所有流行的用於科學計算的庫打包到一個可下載的文件中,該文件可在Windows、macOS和Linux上使用。你可以訪問以下頁面以獲取Anaconda發行版。
https://www.anaconda.com/distribution
除了所有科學計算庫外,Anaconda發行版還附帶Jupyter Notebook,這是一個基於瀏覽器的程序,可使用Python和其他多種語言進行開發。本書的所有秘笈都是在Jupyter Notebook內部開發的,所有代碼都已提供。
當然,不使用Anaconda發行版也可以安裝本書所需的所有庫。感興趣的讀者可訪問Pandas安裝頁面,其網址如下。
http://pandas.pydata.org/pandas-docs/stable/install.html
下載示例代碼文件
讀者可以從www.packtpub.com中下載本書的示例代碼文件。具體步驟如下。
(1)登錄或注冊www.packtpub.com。
(2)在Search(搜索)框中輸入本書名稱Pandas 1.x Cookbook的一部分(不分區大小寫,並且不必輸入完全),即可看到本書出現在推薦下拉菜單中,如圖P-1所示。
圖P-1 搜索書名
(3)選擇Pandas 1.x Cookbook一書,並在其詳細信息頁面中單擊Download code from GitHub(從GitHub上下載代碼)按鈕,如圖P-2所示。需要說明的是,你需要登錄此網站纔能看到該下載按鈕(注冊賬號是免費的)。
圖P-2 選擇本書書名
本書代碼包在GitHub上的托管地址如下。
https://github.com/PacktPublishing/Pandas-Cookbook-Second-Edition
在下載頁面上,單擊Code(代碼)按鈕,然後選擇Download ZIP即可下載本書代碼包,如圖P-3所示。
如果代碼有更新,則也會在現有GitHub存儲庫上更新。
下載文件後,請確保使用版本軟件解壓或析取文件夾。
? WinRAR/7-Zip(Windows繫統)。
? Zipeg/iZip/UnRarX(Mac繫統)。
? 7-Zip/PeaZip(Linux繫統)。
圖P-3 下載本書代碼包
運行Jupyter Notebook
要跟隨本書秘笈進行操作,建議啟動並運行Jupyter Notebook,以便讀者可以在閱讀秘笈的同時運行代碼。與僅閱讀本書相比,在計算機上練習操作可以使讀者自己進行探索並能夠更深入地了解與本書秘笈相關的更多內容。
假設你已經在計算機上安裝了Anaconda發行版,則可以從Anaconda圖形用戶界面或命令行中啟動Jupyter Notebook。兩個選項任選其一,我們強烈建議你使用命令行。如果你打算使用Python做很多事情,那麼需要從這一刻就開始適應命令行。
安裝Anaconda之後,打開命令提示符(在Windows的搜索欄中輸入cmd,或在Mac或Linux上打開終端),然後輸入以下命令。
$ jupyter-notebook
你不必從主目錄而是可以從任何位置處運行上述命令,瀏覽器中的內容將反映該位置。
盡管現在已經啟動了Jupyter Notebook程序,但是實際上我們還沒有啟動可以在 Python中進行開發的單個Notebook。對此,你可以單擊頁面右側的New(新建)按鈕,這將下拉列出所有可能使用的內核的列表。如果你剛剛下載了Anaconda,則隻有一個可用的內核(Python 3)。選擇Python 3內核後,將在瀏覽器中打開一個新選項卡,你可以在其中開始編寫Python代碼。
當然,你也可以打開以前創建的Notebook,而不用開始一個新的。為此,可在Jupyter Notebook瀏覽器主頁提供的文件繫統中導航,然後選擇要打開的Notebook。所有Jupyter Notebook文件均以.ipynb作為擴展名。
或者,你也可以使用雲提供商的Notebook環境。Google和Microsoft都提供了已預裝Pandas的免費Notebook環境。
下載彩色圖像
我們還提供了一個PDF文件,其中包含本書中使用的屏幕截圖/圖表的彩色圖像。你可以通過以下網址下載。
https://static.packt-cdn.com/downloads/9781839213106_ColorImages.pdf
本書約定
本書中使用了許多文本約定。
(1)有關代碼塊的設置形式如下。
import pandas as pd
import numpy as np
movies = pd.read_csv("data/movie.csv")
movies
(2)當要強調代碼塊的特定部分時,相關行或項目以粗體顯示。示例如下。
import pandas as pd
import numpy as np
movies = pd.read_csv("data/movie.csv")
movies
(3)任何命令行輸入或輸出都采用如下所示的粗體代碼形式。
>>> employee = pd.read_csv('data/employee.csv')
>>> max_dept_salary = employee.groupby('DEPARTMENT')['BASE_SALARY'].max()
(4)術語或重要單詞采用中英文對照形式,在括號內保留其英文原文。示例如下。
可以在單個Figure中繪制折線圖(line plot)、散點圖(scatter plot)和條形圖(bar plot)。散點圖是需要為x和y值指定列的圖形。
(5)對於界面詞彙則保留其英文原文,在後面使用括號添加其中文翻譯。示例如下。
可以看到,前兩個目的地機場都在夏威夷,即HNL(火奴魯魯國際機場)和OGG(卡胡魯伊機場),考慮到美國的地理情況,這一點不足為奇。
(6)本書使用了以下兩個圖標。
表示警告或重要的注意事項。
表示提示或小技巧。
每個秘笈的假設
應該假定在每個秘笈的開頭,將NumPy、Matplotlib和Pandas都導入了名稱空間。為了將繪圖直接嵌入Notebook中,還必須運行魔術命令%matplotlib inline。
此外,所有數據都被存儲在data目錄中,並且通常被存儲為CSV文件,以便可以使用read_csv函數直接讀取。
>>> %matplotlib inline
>>> import numpy as np
>>> import matplotlib.pyplot as plt
>>> import pandas as pd
>>> my_dataframe = pd.read_csv('data/dataset_name.csv')
數據集說明
本書共使用了大約20個數據集。在完成秘笈中的操作步驟時,了解每個數據集的背景信息可能會非常有幫助。有關每個數據集的詳細說明,請訪問以下網址中提供的dataset_description Jupyter Notebook。
https://github.com/PacktPublishing/Pandas-Cookbook-Second-Edition
每個數據集都有一個列的列表,並提供了每一列的信息以及如何獲取數據的注釋。
編寫體例
本書大多數章節是采用秘笈形式編寫的,每節就是一個秘笈,每個秘笈中又分別包括“實戰操作”“原理解釋”“擴展知識”小節,使你既能學習Pandas實用操作,又能了解其相關的知識和原理,從而真正掌握和領會Pandas應用技巧。