十分鍾入門pandas,做最高效的數據科學家


這是一篇pandas入門指南,作者用通俗易懂的語言和簡單的示例代碼向我們展示了pandas的概況及一些進階操作。“… 它是所有從事數據科學工作的人必須掌握的庫”,“… pandas正是Python語言如此好用的原因之一”。pandas真有這么棒嗎?一起來瞧瞧吧~

Python是一門開源編程語言,使用起來非常方便,但同時也存在一些開源語言固有的問題:實現一個功能有很多庫可以用。對於剛入門的Python小白來說,很難知道為實現某個特定功能調用哪個庫最好。這時候,就需要有經驗的人來提點一下。本文就打算告訴你:有這樣一個庫,它是所有數據科學從業人員必須掌握的,這個庫就叫“pandas”。

img

號: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中的基本函數

邏輯操作符

img

通過邏輯操作符或取數據的子集。可以使用 & (AND),~ (NOT) 以及 | (OR) 這些常用的操作符,在邏輯操作的前后記得加上括號。

data[data['coluan_1'].isin(["french','engllsh'])]

如果有時候需要對同一列使用大量的OR操作,通常使用.isin()函數代替。

基本的繪圖函數

能實現這個功能主要還是得益於matplotlib庫。像我們在介紹中說的,這個庫的大部分功能都可以直接通過pandas使用。

data['column_numerical'].plot()

img

.plot()函數的輸出示例

data['column_numerical'].hist()

這個函數繪制的是分布圖(也稱直方圖)。

img

.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無法實現的神奇功能吧!

中級函數

統計頻數

img

函數 .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)

img

通過.corr()可以得到所有列的相關矩陣。

pd.plotting.scatter_matrix(data,figsize=(12,8))

img

散布矩陣(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(表格)的形式。

img

正如之前提到的,用鏈式方法將盡可能多的函數功能通過一行代碼實現,可以大大優化代碼結構。(文摘菌提醒:不過也要考慮代碼的可讀性哦~)

遍歷行

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是一個非常重要的工具,它能夠幫助數據科學家快速地閱讀和理解數據,更高效地完成自己的工作。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM