pandas指南:作更高效的數據科學家

摘要:Python是開源的,因此有不少開源固有的問題。若是你是Python新手,很難知道針對特定任務的包哪一個是最好的。你須要有經驗的人來告訴你。今天我要告訴大家的是:在數據科學中,有一個軟件包是大家絕對須要學習的,那就是pandas。

而pandas真正有趣的地方是,不少其餘的包也在裏面。pandas是一個核心包,所以它具備來自其餘各類包的特性。sql

pandas相似於Python中的Excel:它使用表(即DataFrame)並對數據進行轉換,但它還能作更多。json

若是你已經熟悉Python,能夠直接進入第三部分app

如今讓咱們開始:函數

import pandas as pd

pandas包最基本的功能

一、讀取數據:工具

data = pd.read_csv('my_file.csv')

data=pd.read_csv('my_file.csv',sep=';',encoding='latin-1',nrows=1000, kiprows=[2,5])

sep變量表明分隔符。由於Excel中的csv分隔符是「;」,所以須要顯示它。編碼設置爲「latin-1」以讀取法語字符。nrows=1000表示讀取前1000行。skiprows=[2,5]表示在讀取文件時將刪除第2行和第5行學習

最經常使用的函數:read_csv, read_excel編碼

還有一些很不錯的函數:read_clipboard、read_sqlspa

二、寫入數據excel

data.to_csv('my_new_file.csv', index=None)

index=None將簡單地按原樣寫入數據。若是你不寫index=None,會獲得額外的行。code

我一般不使用其餘函數,好比to_excel,to_json,to_pickle,to_csv,雖然它們也作得很好,可是csv是保存表最經常使用的方法。

三、檢查數據:

data.shape

data.describe()

data.head(3)

.head(3)打印數據的前3行,.tail()函數將查看數據的最後一行。

data.loc[8]

打印第8行。

data.loc[8, 'column_1']

將第8行值打印在「column_1」上。

data.loc[range(4,6)]

打印第4行到第6行。

pandas的初級功能

一、邏輯運算

data[data['column_1']=='french']

data[(data['column_1']=='french') & (data['year_born']==1990)]

data[(data['column_1']=='french')&(data['year_born']==1990)&(data['city']=='London')]

若是要根據邏輯操做對數據進行運算,在使用& (AND)、~ (NOT)和| (OR)等邏輯操做以前和以後添加「(」&「)」。

data[data['column_1'].isin(['french', 'english'])]

不要爲同一列編寫多個OR,最好是使用.isin()函數。

二、基本繪圖

多虧了matplotlib包,這個特性才得以實現。就像咱們在介紹中說的,它能夠直接用在pandas身上。

data['column_numerical'].plot()

圖 1 .plot() 輸出示例

data['column_numerical'].hist()

繪製分佈圖(直方圖)

圖 2 .hist() 函數輸出示例

%matplotlib inline

若是你使用Jupyter,在繪圖以前,不要忘記寫這一行(在代碼中只寫一次)

三、更新數據

data.loc[8, 'column_1'] = 'english'

將' column_1 '的第8行值替換爲' english '

data.loc[data['column_1']=='french', 'column_1'] = 'French'

在一行中更改多行值

pandas的中級功能

如今你能夠作一些在Excel中很容易作的事情。讓咱們來挖掘一些在Excel中作不到的神奇事情。

一、計算功能

data['column_1'].value_counts()

圖 3 .value_counts() 輸出示例

二、對全行、全列或全部數據的操做

data['column_1'].map(len)

len()函數應用於「column_1」的每一個元素

map()操做將一個函數應用於列的每一個元素。

data['column_1'].map(len).map(lambda x : x/100).plot()

pandas的另外一個特色是進行鏈式操做。它能夠幫助你在一行代碼中執行多個操做,從而更加簡單和高效。

data.apply(sum)

.apply()將函數應用於列。

.applymap()將一個函數應用於表(DataFrame)中的全部單元格。

三、tqdm包

在處理大型數據集時,pandas可能須要一些時間來運行.map()、.apply()、.applymap()操做。tqdm是一個很是有用的包,它能夠幫助預測這些操做什麼時候完成。

from tqdm import tqdm_notebook

tqdm_notebook().pandas()

用pandas設置tqdm

data['column_1'].progress_map(lambda x : x.count('e'))

將.map()替換爲.progress_map(),.apply()和.applymap()也是同樣

圖4 這是你在Jupyter上看到的的進度條

四、相關矩陣和散射矩陣

data.corr()

data.corr().applymap(lambda x : int(x*100)/100)

圖 5.corr() 函數會獲得相關矩陣

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

圖 6散射矩陣的例子,它繪製同一圖表中兩列的全部組合

pandas的高級功能

一、行列合併

在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(表)

圖 7使用鏈式操做,只需一行代碼

三、遍歷行

dictionary = {}

for i,row in data.iterrows():

dictionary[row['column_1']] = row['column_2']

iterrows()循環兩個變量:行索引和行(上面代碼中的i和row)。

整體來講,pandas是一個幫助數據科學家快速閱讀和理解數據的工具包,它也能夠說是Python如此優秀的緣由之一。我還能夠展現更多pandas包其餘有趣的特色,但以上所述足以讓人理解爲何數據科學家離不開pandas包。總之,pandas包有如下特色:

一、 簡單易用,隱藏了全部複雜和抽象的計算;

二、很是直觀;

三、快速。



本文做者:【方向】

閱讀原文

本文爲雲棲社區原創內容,未經容許不得轉載。

相關文章
相關標籤/搜索