DataFrame的行、列索引
函数 | 功能 |
---|---|
df.loc[val] | 根据标签选择单行或多行 |
df.iloc[where] | 根据整数位置选择单行或多行 |
df.loc[:,:] | 根据标签选择多行多列[行,列],用法和numpy切片的区别见下文 |
df.iloc[:,:] | 根据整数位置选择多行多列[行,列] ,用法和numpy切片一致 |
reindex方法 | 通过标签选择行或列 |
get_value, set_value | 根据行和列的标签设置单个值 |
import numpy as np
import pandas as pd
In [40]: data = pd.DataFrame(np.arange(16).reshape((4,4)))
In [41]: data
Out[41]:
0 1 2 3
0 0 1 2 3
1 4 5 6 7
2 8 9 10 11
3 12 13 14 15
# 列索引
In [43]: data[2] #索引单列
Out[43]:
0 2
1 6
2 10
3 14
Name: 2, dtype: int64
In [44]: data[[1,2]] #索引多列
Out[44]:
1 2
0 1 2
1 5 6
2 9 10
3 13 14
# 行索引
In [45]: data.loc[3] #索引单行
Out[45]:
0 12
1 13
2 14
3 15
Name: 3, dtype: int64
In [46]: data.loc[[2,0]] #索引多行
Out[46]:
0 1 2 3
2 8 9 10 11
0 0 1 2 3
# 注意:选择多行或多列时,要用[]括起来,且之间用,隔开
DataFrame的切片和numpy切片的区别:
(1)pd.loc[0:3] 选取出0 1 2 3 共四行;pd.iloc[0:3] 选取出0 1 2 共三行; np[0:3] 选取出0 1 2 共三行。
In [31]: data
Out[31]:
0 1 2 3
0 0 1 2 3
1 4 5 6 7
2 8 9 10 11
3 12 13 14 15
In [32]: data[2:3] #选取第2行
Out[32]:
0 1 2 3
2 8 9 10 11
In [33]: data.iloc[2:3] #选取第2行
Out[33]:
0 1 2 3
2 8 9 10 11
In [34]: data.iloc[:,2:3]#选取第2列
Out[34]:
2
0 2
1 6
2 10
3 14
In [35]: data.loc[2:3] #选取第2 3行 (前提得是行标签是数字)
Out[35]:
0 1 2 3
2 8 9 10 11
3 12 13 14 15
In [36]: data.loc[:,2:3] #选取第2 3列 (前提得是列标签是数字)
Out[36]:
2 3
0 2 3
1 6 7
2 10 11
3 14 15
(2)对于numpy数据,切片范围超过数据原有size会报错;但对于pandas数据,切片范围超过数据原有size则直接切到多少返回多少,没有就返回Empty DataFrame。
In [37]: data.iloc[:,3:5]
Out[37]:
3
0 3
1 7
2 11
3 15
In [47]: data.iloc[:,5:10]
Out[47]:
Empty DataFrame
Columns: []
Index: [0, 1, 2, 3]
In [38]: data.iloc[5:10]
Out[38]:
Empty DataFrame
Columns: [0, 1, 2, 3]
Index: []
DataFrame的条件过滤
In [48]: data
Out[48]:
0 1 2 3
0 0 1 2 3
1 4 5 6 7
2 8 9 10 11
3 12 13 14 15
# 与语句
In [49]: data[data[0]>2] # 过滤出第0列数据大于2的所有行
Out[49]:
0 1 2 3
1 4 5 6 7
2 8 9 10 11
3 12 13 14 15
In [50]: data[(data[0]>2) & (data[2]<10)] # 过滤出第0列数据大于2且第2列数据小于10的所 有行
Out[50]:
0 1 2 3
1 4 5 6 7
# 或语句
In [51]: data[data[1]>10] # 过滤出第1列数据大于10的所有行
Out[51]:
0 1 2 3
3 12 13 14 15
In [52]: data[(data[1]>10) | (data[3]<5)] # 过滤出第1列数据大于10或第3列数据小于5的所有行
Out[52]:
0 1 2 3
0 0 1 2 3
3 12 13 14 15
# 注意1:[]中的'与'要用'&','或'要用'|'
# 注意2:条件语句要用()括起来,否则会产生bug