這是一篇pandas入門指南,作者用通俗易懂的語言和簡單的示例代碼向我們展示了pandas的概況及一些進階操作。“… 它是所有從事數據科學工作的人必須掌握的庫”,“… pandas正是Python語言如此好用的原因之一”。pandas真有這么棒嗎?一起來瞧瞧吧~
Python是一門開源編程語言,使用起來非常方便,但同時也存在一些開源語言固有的問題:實現一個功能有很多庫可以用。對於剛入門的Python小白來說,很難知道為實現某個特定功能調用哪個庫最好。這時候,就需要有經驗的人來提點一下。本文就打算告訴你:有這樣一個庫,它是所有數據科學從業人員必須掌握的,這個庫就叫“pandas”。
號:923414804
群里有志同道合的小伙伴,互幫互助,
群里有不錯的視頻學習教程和PDF!
Pandas最有趣的地方就是它包含了許多其他Python庫的功能,也就是說pandas是各種庫的集大成者。這意味着,很多時候你只需要pandas就可以完成大部分工作。
Pandas就像是Python中的Excel:它的基本數據結構是表格(在pandas中叫“DataFrame”),可以對數據進行各種操作和變換。當然,它還能做很多其他的事。
如果你對Python已經比較熟悉了,可以直接跳到第三段。
讓我們開始吧:
import pandas as pd
不要問我為什么用“pd”而不用“p”或者其他縮寫形式,事實就是大家都是這么用的,你這么用就對了!😃 (皮這一下很開心~)
Pandas中的入門級函數
讀取數據
data=pd.read_csv('my_file.csv')
data=pd.read_csv(my_file.csv',sep=';",encoding="latin-1',nrows=1000,skiprous=[2,5])
sep參數的意思就是分隔符。如果你要處理的是法語數據,Excel中使用的csv分隔符是“;”,那么你需要通過這個參數顯式地聲明分隔符。encoding參數需要設置為“latin-1”以便能識別出法語的字符;n_rows=1000表示讀取前1000行數據;skiprows=[2,5]的意思是在讀取文件時去掉第2行和第5行的數據。
最常用的函數是:read_csv和read_excel
其他幾個非常好用的函數是:read_clipboard和read_sql
寫入數據
data.to_csv("my_new_file.csv",index=None)
通過設置index=None,就會原原本本地將數據寫入到文件中。如果你沒有指定index=None,程序就會在文件中新增一個索引列,這個列在所有列的最前面,值為0,1,2,3…直到最后一行。
我一般不用像.to_excel,.to_json,.to_pickle這些函數,因為.to_csv這個函數已經非常好用了!而且,csv也是目前最常用的存儲表格數據的文件格式。
檢查數據
data.shape
驗證(rows, columns)信息是否與數據的行、列數相符3
data.describe()
計算一些基本的統計量,如數據計數、均值、標准差、分位數等。
查看數據
data.head(3)
打印數據的前3行。和.head()函數類似,也可以通過.tail()函數查看數據最后幾行。
data.loc[8]
打印行索引為8的行。(注意下標默認從0開始)
data.loc[8,'column_1']
打印行索引為8,列名為’column_1’所指向的數據。
data.loc[range(4,6)]
輸出行索引從4到6的行數據(不包括6)
Pandas中的基本函數
邏輯操作符
通過邏輯操作符或取數據的子集。可以使用 & (AND),~ (NOT) 以及 | (OR) 這些常用的操作符,在邏輯操作的前后記得加上括號。
data[data['coluan_1'].isin(["french','engllsh'])]
如果有時候需要對同一列使用大量的OR操作,通常使用.isin()函數代替。
基本的繪圖函數
能實現這個功能主要還是得益於matplotlib庫。像我們在介紹中說的,這個庫的大部分功能都可以直接通過pandas使用。
data['column_numerical'].plot()
.plot()函數的輸出示例
data['column_numerical'].hist()
這個函數繪制的是分布圖(也稱直方圖)。
.hist()函數的輸出示例
%matplotlib inline
如果你使用的是Jupyter,不要忘了在繪圖前加上這一行(只需要在notebook中聲明一次即可)。
更新數據
data.loc[8,'column_1']='english'
用“english”替換行索引為8列名為‘column_1’時所指向的值。
data.loc[data['column_1']=='french','column_1']='French'
用1行代碼更改多行數據的值。
好了,現在你已經學會了在Excel中能完成的一些常用功能。接下來,讓我們發掘一些Excel無法實現的神奇功能吧!
中級函數
統計頻數
函數 .value_counts() 的輸出示例。
針對行、列或者所有數據的操作
data['column_1'].map(1en)
len()函數會應用到’column_1’列下的每一個元素。
.map()操作會將一個函數應用到指定列的每一個元素。
data['column_1']. map(1en). map(1ambda x:x/100).plot()
Pandas庫中一個非常好用的功能就是鏈式方法。它能夠幫助你通過一行代碼完成多個操作(比如這里的.map()函數和.plot()函數),既簡單又高效。
chaining method(鏈式方法):
https://tomaugspurger.github.io/method-chaining
apply函數會將一個函數應用到所有列。
applymap ()函數會將一個函數應用到表格的所有單元。
tqdm — 獨一無二的模塊
當處理大規模數據集時,pandas需要花費一些時間來完成.map(),.apply(),.applymap()操作。tqdm是一個非常有用的庫,能夠預測這些操作什么時候執行結束。(好吧,我說謊了,我之前說過我們只用pandas庫)。可以使用 ” pip install tqdm” 命令安裝tqdm。
from tqdm import tqdm_notebook
tqdm_notebook().pandas()
使用pandas來創建tqdm進程
data['column_1'].progress_map(lambda x:x.count('e"))
用.progress_map()替換.map()函數,對.apply()函數和.applymap()函數也是一樣的。
[圖片上傳失敗...(image-2fe289-1550055875294)]
這就是在Jupyter中使用tqdm和pandas之后可以看到的進度條。
相關矩陣和散布矩陣(scatter matrices)
data.corr()
data. corr(). applymap(lambda x: int(x*100)/100)
通過.corr()可以得到所有列的相關矩陣。
pd.plotting.scatter_matrix(data,figsize=(12,8))
散布矩陣(scatter matrices)的示例。它在同一個圖中繪制兩個列的值的所有組合。
Pandas中的高級操作
SQL的連接功能
連接操作在Pandas中非常簡單。
data.merge(other_data,on=['column_1','column_2','column_3'])
只需要一行代碼就可以將3列連接到一起。
分組功能
剛開始使用這個功能的時候並不容易,你首先需要掌握一些語法知識,之后你會發現自己再也離不開這個功能了。
data.groupby('column_1)['column_2'].apply(sum).reset_index()
基於某一列對數據進行分組,再對另一列上的數據執行一些函數操作。.reset_index()函數可以將數據轉變為DataFrame(表格)的形式。
正如之前提到的,用鏈式方法將盡可能多的函數功能通過一行代碼實現,可以大大優化代碼結構。(文摘菌提醒:不過也要考慮代碼的可讀性哦~)
遍歷行
dictionary={}
for i, row in data. iterrows():
dictionary[row['column_1']]=row['column_2]
.iterrows()函數同時獲取2個變量並實現循環:分別是行的索引和行的對象(也就是上面代碼中的i和row)。
總而言之,pandas庫正是Python語言如此好用的原因之一
僅僅通過本篇文章,很難詳盡地展示Pandas庫的所有功能,但是通過以上內容,你也應該明白為什么一名數據科學家離不開Pandas庫了。總的來說,Pandas庫有以下優點:
- 方便易用,將所有復雜和抽象的運算過程都隱藏起來;
- 大部分功能的實現方式都非常直觀;
- 快速,盡管並不是最快的數據分析庫(在C語言中進行了優化)。
Pandas是一個非常重要的工具,它能夠幫助數據科學家快速地閱讀和理解數據,更高效地完成自己的工作。