使用pandas索引和選擇數據時,總是需要百度,因此決定對pandas.DataFrame中的索引和選擇方法做個總結。
pandas中有三種主要索引方法:
[]
:基本切片方法.loc
:基於標籤.iloc
:基於位置- 注意:
.ix
的用法在0.20.0中已經不建議使用了!
本文所有的索引和選擇都是對以下這個DataFrame進行:
import pandas as pd
import numpy as np
df = pd.DataFrame(np.arange(1,31).reshape(6,5), columns=list('ABCDE'), index=list('abcdef'))
A B C D E
a 1 2 3 4 5
b 6 7 8 9 10
c 11 12 13 14 15
d 16 17 18 19 20
e 21 22 23 24 25
f 26 27 28 29 30
1.[]
:基本切片方法
1.1 []
操作只能直接索引列標籤,可傳入一列或離散的多列(list)
print(df['A']) #等價於df.A
a 1
b 6
c 11
d 16
e 21
f 26
print(df[['A', 'C']])
A C
a 1 3
b 6 8
c 11 13
d 16 18
e 21 23
f 26 28
1.2可以用冒號,根據行的位置索引連續的多行
print(df[1:3]) #如果傳入[n:n+1]可以索引第n行
A B C D E
b 6 7 8 9 10
c 11 12 13 14 15
1.3 根據一列布爾數組進行索引
print(df[df.A > 15])
A B C D E
d 16 17 18 19 20
e 21 22 23 24 25
f 26 27 28 29 30
2. .loc
:基於行
標籤的索引方法
2.1 選擇一行或離散的多行,傳入一個值或一個列表
print(df.loc['c']) #選擇一行時返回series對象
A 11
B 12
C 13
D 14
E 15
2.2選擇連續的多行,要注意這裏會包含結束行,即‘f’行
print(df.loc['c' : 'e']) #返回dataframe對象,包括結束行
A B C D E
c 11 12 13 14 15
d 16 17 18 19 20
e 21 22 23 24 25
2.3 選擇多行之後可以進一步篩選列(其實就是對DataFrame用[]
篩選列)
print(df.loc['c':'e'][['A', 'B']])
A B
c 11 12
d 16 17
e 21 22
3. .iloc
:基於位置的索引方法
1.1 傳入一個數值或列表,代表索引行
print(df.iloc[1]) #1是行順序,返回第二行,數據類型爲series
A 6
B 7
C 8
D 9
E 10
1.2 數值加冒號,索引連續的多行
print(df.iloc[1:3])
A B C D E
b 6 7 8 9 10
c 11 12 13 14 15
1.3 加個逗號,索引一個單元格
print(df.iloc[1, 2]) #返回value矩陣中(2,3)的值
8
1.4 逗號加冒號,索引一個矩陣
print(df.iloc[0:3, 0:3]) #返回3x3矩陣
A B C
a 1 2 3
b 6 7 8
c 11 12 13
1.5 很自然,逗號前爲冒號,就可以根據位置索引列了
print(df.iloc[:, 1:3])
B C
a 2 3
b 7 8
c 12 13
d 17 18
e 22 23
f 27 28