【Mark一下】46個常用 Pandas 方法速查表

  • 2019 年 12 月 16 日
  • 筆記

導讀:Pandas是日常數據分析師使用最多的分析和處理庫之一,其中提供了大量方便實用的數據結構和方法。但在使用初期,很多人會不知道:

1.它能提供哪些功能?

2.我的需求應該用哪個方法?

3.具體某個方法怎麼調用?

本篇文章總結了常用的46個Pandas數據工作方法,包括創建數據對象、查看數據信息、數據切片和切塊、數據篩選和過濾、數據預處理操作、數據合併和匹配、數據分類匯總以及map、apply和agg高級函數的使用方法。

你可以粗略瀏覽本文,了解Pandas的常用功能;也可以保存下來,作為以後數據處理工作時的速查手冊,沒準哪天就會用上呢~

1創建數據對象

Pandas最常用的數據對象是數據框(DataFrame)和Series。數據框與R中的DataFrame格式類似,都是一個二維數組。Series則是一個一維數組,類似於列表。數據框是Pandas中最常用的數據組織方式和對象。有關更多數據文件的讀取將在第三章介紹,本節介紹從對象和文件創建數據框的方式,具體如表1所示:

表1 Pandas創建數據對象

方法

用途

示例

示例說明

read_tableread_csvread_excel

從文件創建數據框

In: import pandas as pd In: data1 = pd.read_table('table_data.txt',sep=';')

讀取table_data.txt文件,數據分隔符是;

DataFrame.from_dictDataFrame.from_itemsDataFrame.from_records

從其他對象例如Series、Numpy數組、字典創建數據框

In: data_dict = {'col1': [2, 1, 0], 'col2': ['a', 'b', 'a'], 'col3': [True, True, False]}In: data2 = pd.DataFrame.from_dict(data_dict)

基於字典創建數據框,列名為字典的3個key,每一列的值為key對應的value值

2 查看數據信息

查看信息常用方法包括對總體概況、描述性統計信息、數據類型和數據樣本的查看,具體如表2所示:

表2 Pandas常用查看數據信息方法匯總

方法

用途

示例

示例說明

info

查看數據框的索引和列的類型、費控設置和內存用量信息。

In: print(data2.info())Out: <class 'pandas.core.frame.DataFrame'>RangeIndex: 3 entries, 0 to 2Data columns (total 3 columns):col1 3 non-null int64col2 3 non-null objectcol3 3 non-null booldtypes: bool(1), int64(1), object(1)memory usage: 131.0+ bytesNone

返回對象的所有信息

describe

顯示描述性統計數據,包括集中趨勢、分散趨勢、形狀等。

In: print(data2.describe())Out: col1count 3.0mean 1.0std 1.0min 0.025% 0.550% 1.075% 1.5max 2.0

默認查看數值型列,使用include= 'all'查看所有類型數據

dtype

查看數據框每一列的數據類型

In: print(data2.dtypes)Out: col1 int64col2 objectcol3 booldtype: objectt

結果是Series類型

head

查看前N條結果

In: print(data2.head(2))Out: col1 col2 col30 2 a True1 1 b True

從第一行開始取前2行

tail

查看後N條結果

In: print(data2.tail(2))Out: col1 col2 col31 1 b True2 0 a False

從最後一行開始取後2行

index

查看索引

In: print(data2.index)Out: RangeIndex(start=0, stop=3, step=1)

結果是一個類列表的對象,可用列表方法操作對象

columns

查看列名

In: print(data2.columns)Out: Index(['col1', 'col2', 'col3'], dtype='object')

shape

查看形狀,記錄有多少行多少列

In: print(data2.shape)Out: (3,3)

形狀為元組類型

isnull

查看每個值是否為空值

In: print(data2.isnull())Out: col1 col2 col30 False False False1 False False False2 False False False

數據中沒有空值,因此都是False

unique

查看特定列的唯一值

In: print(data2['col2'].unique())Out: ['a' 'b']

查看col2列的唯一值

注意 在上述查看方法中,除了info方法外,其他方法返回的對象都可以直接賦值給變量,然後基於變量對象做二次處理。例如可以從dtype的返回值中僅獲取類型為bool的列。

3 數據切片和切塊

數據切片和切塊是使用不同的列或索引切分數據,實現從數據中獲取特定子集的方式。常見的數據切片和切換的方式如表3所示:

表3 Pandas常用數據切分方法

方法

用途

示例

示例說明

[['列名1', '列名2',…]]

按列名選擇單列或多列

In: print(data2[['col1','col2']])Out: col1 col20 2 a1 1 b2 0 a

選擇data2的col1和col3兩列

[m:n]

選擇行索引在m到n間的記錄

In: print(data2[0:2])Out: col1 col2 col30 2 a True1 1 b True

選取行索引在[0:2)中間的記錄,不包含2

iloc[m:n]

In: print(data2.iloc[0:2])Out: col1 col2 col30 2 a True1 1 b True

iloc[m:n,j:k]

選擇行索引在m到n且列索引在j到k間的記錄

In: print(data2.iloc[0:2,0:1])Out: col10 21 1

選取行索引在[0:2)列索引在[0:1)中間的記錄,行索引不包含2,列索引不包含1

loc[m:n,[ '列名1', '列名2',…]]

選擇行索引在m到n間且列名為列名1、列名2的記錄

In: print(data2.loc[0:2,['col1','col2']])Out: col1 col20 2 a1 1 b2 0 a

選取行索引在[0:2)之間,列名為'col1'和'col2'的記錄,行索引不包含2

提示 如果選擇特定索引的數據,直接寫索引值即可。例如data2.loc[2,['col1','col2']]為選擇第三行且列名為'col1'和'col2'的記錄。

4 數據篩選和過濾

數據篩選和過濾是基於條件的數據選擇,本章2.6.3提到的比較運算符都能用於數據的篩選和選擇條件,不同的條件間的邏輯不能直接用and、or來實現且、或的邏輯,而是要用&和|實現。常用方法如表4所示:

表4 Pandas常用數據篩選和過濾方法

方法

用途

示例

示例說明

單列單條件

以單獨列為基礎選擇符合條件的數據

In: print(data2[data2['col3']==True])Out: col1 col2 col30 2 a True1 1 b True

選擇col3中值為True的所有記錄

多列單條件

以所有的列為基礎選擇符合條件的數據

In: print(data2[data2=='a'])Out: col1 col2 col30 NaN a NaN1 NaN NaN NaN2 NaN a NaN

選擇所有值為a的數據

使用「且」進行選擇

多個篩選條件,且多個條件的邏輯為「且」,用&表示

In: print(data2[(data2['col2']=='a') & (data2['col3']==True)])Out: col1 col2 col30 2 a True

選擇col2中值為a且col3值為True的記錄

使用「或」進行選擇

多個篩選條件,且多個條件的邏輯為「或」,用|表示

In: print(data2[(data2['col2']=='a') | (data2['col3']==True)])Out: col1 col2 col30 2 a True1 1 b True2 0 a False

選擇col2中值為a或col3值為True的記錄

使用isin查找範圍

基於特定值的範圍的數據查找

In: print(data2[data2['col1'].isin([1,2])])Out: col1 col2 col30 2 a True1 1 b True

篩選col1列值為1或2的記錄

query

按照類似sql的規則篩選數據

In: print(data2.query('col2=="b"'))Out: col1 col2 col31 1 b 1

篩選數據中col2值為b的記錄

5 數據預處理操作

Pandas的數據預處理基於整個數據框或Series實現,整個預處理工作包含眾多項目,本節列出通過Pandas實現的場景功能。本節功能具體如表5所示:

表5 Pandas常用預處理方法

方法

用途

示例

示例說明

T

轉置數據框,行和列轉換

In: print(data2.T)Out: 0 1 2col1 2 1 0col2 a b a

行索引、列名以及數據相互調換

sort_values

按值排序,默認為正序,可通過ascending=False指定倒序排序

In: print(data2.sort_values(['col1']))Out: col1 col22 0 a1 1 b0 2 a

按colo1列排序

sort_index

按索引排序,默認為正序,可通過ascending=False指定倒序排序

In: print( data2.sort_index(ascending=False))Out: col1 col2 col32 0 a 01 1 b 10 2 a 1

按索引倒序排序

dropna

去掉缺失值,可通過axis設置為0或 index、1或columns丟棄帶有缺失值的行或列

In: print(data2.dropna())Out: col1 col2 col30 2 a True1 1 b True2 0 a False

直接丟棄帶有缺失值的行

fillna

填充缺失值,可設置為固定值以及不同的填充方法

In: print(data2.fillna(method='bfill'))Out: col1 col2 col30 2 a True1 1 b True2 0 a False

使用下一個有效記錄填充缺失值

astype

轉換特定列的類型

In: data2['col3'] = data2['col3'].astype(int)In: print(data2.dtypes)Out: col1 int64col2 objectcol3 int32dtype: object

將col3轉換為int型

rename

更新列名

In: print(data2.rename(columns= {'col1':'A','col2':'B','col3':'C'}))Out: A B C0 2 a 11 1 b 12 0 a 0

將data2的列名更新為A、B、C

drop_duplicates

去重重複項,通過指定列設置去重的參照

In: print(data2.drop_duplicates(['col3']))Out: col1 col2 col30 2 a 12 0 a 0

按col3列去重重複記錄

replace

查找替換

In: print(data2.replace('a','A'))Out: col1 col2 col30 2 A 11 1 b 12 0 A 0

將小寫字符a替換為大些字母A

sample

抽樣

In: print(data2.sample(n=2))Out: col1 col2 col30 2 a 11 1 b 1

從data2中隨機抽取2條數據

6 數據合併和匹配

數據合併和匹配是將多個數據框做合併或匹配操作。具體實現如表6所示:

表6 Pandas常用數據合併和匹配方法

方法

用途

示例

示例說明

merge

關聯並匹配兩個數據框

In: print(data2.merge(data1,on='col1',how='inner'))Out: col1 col2_x col3_x col2_y col3_y col40 1 b 1 2 3 4

關聯data1和data2,主鍵分別為a列和col1列,內關聯方式

concat

合併兩個數據框,可按行或列合併

In: print(pd.concat((data1,data2),axis=1))Out: col1 col2 col3 col4 col1 col2 col30 1 2 3 4 2 a 11 6 7 8 9 1 b 12 11 12 13 14 0 a 0

按列合併data1和data2,可通過指定axis=0按行合併

append

按行追加數據框

In: print(data1.append(data2))Out: col1 col2 col3 col40 1 2 3 4.01 6 7 8 9.02 11 12 13 14.00 2 a 1 NaN1 1 b 1 NaN2 0 a 0 NaN

將data2追加到data,等價於pd.concat((data1,data2), axis=0)

join

關聯並匹配兩個數據框

In: print(data1.join(data2,lsuffix='_d1', rsuffix='_d2'))Out: col1_d1 col2_d1 col3_d1 col4 col1_d2 col2_d2 col3_d20 1 2 3 4 2 a 11 6 7 8 9 1 b 12 11 12 13 14 0 a 0

將data1和data2關聯,設置關聯後的列名前綴分別為d1和d2

7 數據分類匯總

數據分類匯與Excel中的概念和功能類似。具體實現如表7所示:

表7 Pandas常用數據分類匯總方法

方法

用途

示例

示例說明

groupby

按指定的列做分類匯總

In: print(data2.groupby(['col2'])['col1'].sum())Out: col2a 2b 1Name: col1, dtype: int64

以col2列為維度,以col1列為指標求和

pivot_table

建立數據透視表視圖

In: print(pd.pivot_table(data2,index=['col2']))Out: col1 col3col2a 1 0.5b 1 1.0Name: col1, dtype: int64

以col2列為索引建立數據透視表,默認計算方式為求均值

8 高級函數使用

Pandas能直接實現數據框級別高級函數的應用,而不用寫循環遍歷每條記錄甚至每個值後做計算,這種方式能極大提升計算效率,具體如表8所示:

表8 Pandas常用高級函數

方法

用途

示例

示例說明

map

將一個函數或匿名函數應用到Series或數據框的特定列

In: print(data2['col3'].map(lambda x:x*2))Out: 0 21 22 0Name: col3, dtype: int64

對data2的col3的每個值乘2

apply

將一個函數或匿名函數應用到Series或數據框

In: print(data2.apply(pd.np.cumsum))Out: col1 col2 col30 2 a 11 3 ab 22 3 aba 2

將data2的所有列按行(默認)做累加

agg

一次性對多個列做聚合操作

In: import numpy as npIn: print(data2.groupby(['col2']).agg( {'col1':np.sum,'col3':np.mean}))Out: col1 col3col2a 2 0.5b 1 1.0

在data2中以col2為維度,對col1求和,col3求均值

作者:宋天龍

摘自:《Python數據分析與數據化運營(第2版)》

來源:Python愛好者社區