使用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