Pandas方法

 

1建立數據對象sql

 

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

表1 Pandas建立數據對象app

方法函數

用途spa

示例excel

示例說明對象

read_table排序

read_csv索引

read_excel內存

從文件建立數據框

In: import  pandas as pd   

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

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

DataFrame.from_dict

DataFrame.from_items

DataFrame.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 2

Data  columns (total 3 columns):

col1    3 non-null int64

col2    3 non-null object

col3    3 non-null bool

dtypes:  bool(1), int64(1), object(1)

memory  usage: 131.0+ bytes

None

返回對象的全部信息

describe

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

In: print(data2.describe())

Out:    col1

count   3.0

mean    1.0

std     1.0

min     0.0

25%     0.5

50%     1.0

75%     1.5

max     2.0

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

dtype

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

In: print(data2.dtypes)

Out:  col1     int64

col2    object

col3      bool

dtype:  objectt

結果是Series類型

head

查看前N條結果

In: print(data2.head(2))

Out:   col1 col2   col3

0     2     a  True

1     1     b  True

從第一行開始取前2行

tail

查看後N條結果

In: print(data2.tail(2))

Out:   col1 col2    col3

1     1     b   True

2     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   col3

0  False   False  False

1  False   False  False

2  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 col2

0     2     a

1     1     b

2     0     a

選擇data2的col1和col3兩列

[m:n]

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

In:  print(data2[0:2])

Out:       col1 col2  col3

0     2     a  True

1     1     b  True

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

iloc[m:n]

In: print(data2.iloc[0:2])

Out:       col1 col2  col3

0     2     a  True

1     1     b  True

iloc[m:n,j:k]

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

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

Out:          col1

0     2

1     1

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

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

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

In:  print(data2.loc[0:2,['col1','col2']])

Out:    col1 col2

0     2     a

1     1     b

2     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   col3

0     2     a  True

1     1    b   True

選擇col3中值爲True的全部記錄

多列單條件

以全部的列爲基礎選擇符合條件的數據

In:  print(data2[data2=='a'])

Out:    col1 col2   col3

0   NaN     a   NaN

1   NaN   NaN   NaN

2   NaN     a   NaN

選擇全部值爲a的數據

使用「且」進行選擇

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

In:  print(data2[(data2['col2']=='a') & (data2['col3']==True)])

Out:    col1 col2   col3

0     2     a  True

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

使用「或」進行選擇

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

In:  print(data2[(data2['col2']=='a') | (data2['col3']==True)])

Out:      col1 col2   col3

0     2     a   True

1     1     b   True

2     0     a  False

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

使用isin查找範圍

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

In:  print(data2[data2['col1'].isin([1,2])])

Out:    col1 col2   col3

0     2     a  True

1     1     b  True

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

query

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

In:  print(data2.query('col2=="b"'))

Out:    col1 col2   col3

1     1     b     1

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

5 數據預處理操做

 

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

表5 Pandas經常使用預處理方法

方法

用途

示例

示例說明

T

轉置數據框,行和列轉換

In:  print(data2.T)

Out:      0   1  2

col1  2   1  0

col2  a   b  a

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

sort_values

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

In: print(data2.sort_values(['col1']))

Out:   col1 col2

2     0     a

1     1     b

0     2     a

按colo1列排序

sort_index

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

In:  print( data2.sort_index(ascending=False))

Out:    col1 col2   col3

2     0     a     0

1     1     b     1

0     2     a     1

按索引倒序排序

dropna

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

In:  print(data2.dropna())

Out:    col1 col2   col3

0     2     a   True

1     1     b   True

2     0     a  False

直接丟棄帶有缺失值的行

fillna

填充缺失值,可設置爲固定值以及不一樣的填充方法

In:  print(data2.fillna(method='bfill'))

Out:    col1 col2   col3

0     2     a   True

1     1     b   True

2     0     a  False

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

astype

轉換特定列的類型

In:  data2['col3'] = data2['col3'].astype(int)

In:  print(data2.dtypes)

Out:  col1     int64

col2    object

col3     int32

dtype:  object

將col3轉換爲int型

rename

更新列名

In:  print(data2.rename(columns=
 {'col1':'A','col2':'B','col3':'C'}))

Out:    A   B  C

0  2   a  1

1  1   b  1

2  0   a  0

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

drop_duplicates

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

In:  print(data2.drop_duplicates(['col3']))

Out:    col1 col2   col3

0     2     a     1

2     0     a     0

按col3列去重重複記錄

replace

查找替換

In:  print(data2.replace('a','A'))

Out:    col1 col2   col3

0     2     A     1

1     1     b     1

2     0     A     0

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

sample

抽樣

In:  print(data2.sample(n=2))

Out:    col1 col2   col3

0     2     a     1

1     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  col4

0    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 col3

0   1    2   3   4      2    a     1

1   6    7   8   9      1    b     1

2  11   12  13  14      0    a     0

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

append

按行追加數據框

In:  print(data1.append(data2))

Out:   col1 col2   col3  col4

0     1     2     3   4.0

1     6     7     8   9.0

2    11    12    13  14.0

0     2     a     1   NaN

1     1     b     1   NaN

2     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_d2

0   1    2   3   4     2  a  1

1   6    7   8   9     1  b  1

2  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:  col2

a    2

b    1

Name:  col1, dtype: int64

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

pivot_table

創建數據透視表視圖

In: print(pd.pivot_table(data2,index=['col2']))

Out:       col1   col3

col2

a        1    0.5

b        1    1.0

Name:  col1, dtype: int64

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

8 高級函數使用

 

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

表8 Pandas經常使用高級函數

方法

用途

示例

示例說明

map

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

In:  print(data2['col3'].map(lambda x:x*2))

Out:  0    2

1    2

2    0

Name:  col3, dtype: int64

對data2的col3的每一個值乘2

apply

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

In:  print(data2.apply(pd.np.cumsum))

Out:    col1 col2   col3

0     2    a      1

1     3    ab     2

2     3   aba     2

將data2的全部列按行(默認)作累加

agg

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

 

In:  import numpy as np

In:  print(data2.groupby(['col2']).agg(
 {'col1':np.sum,'col3':np.mean}))

Out:    col1   col3

col2

a     2    0.5

b     1    1.0

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

相關文章
相關標籤/搜索