Dataframe 索引数据
原始数据:
data = pd.DataFrame(np.arange(12).reshape(4,3),columns=['A','B','C'])
A B C
0 0 1 2
1 3 4 5
2 6 7 8
3 9 10 11
way1:普通标签
列索引:
data['A'] or data[['A','B']]
行索引:
data[:2]
可添加逻辑判断筛选
data = data[data['A']>2]
A B C
1 3 4 5
2 6 7 8
3 9 10 11
way2:轴标签(loc)
data.loc[idx] # 选择单行或多行(idx 为数值)
data.loc[ : , col] # 选择所有行的col列
data.loc[idx , col] # 同时选择行和列中的一部分
data.loc[:1,['B','A']] # 前两行的'B','A'列
B A
0 1 0
1 4 3
way3:整数标签(iloc)
data.iloc[idx] 根据整数位置选择单行或多行,where只能为数值
data.iloc[ : , idx] 根据整数位置选择单列或多列
data.iloc[where_i, where_j] 根据整数位置选择行和列
data.iloc[:2,:2]
A B
0 0 1
1 3 4
data.iloc[:2,[2,0,1]]
C A B
0 2 0 1
1 5 3 4
注:索引得到的仍为 Dataframe,还可以继续进行pandas操作
loc与iloc的区别
data = pd.DataFrame(np.arange(12).reshape(4,3),columns=['A','B','C'],
index=np.random.randint(0,20,4))
A B C
1 0 1 2
10 3 4 5
16 6 7 8
14 9 10 11
data.loc[idx] 和 data.iloc[idx] 都可以获取第idx行
data.loc[idx][['A', 'B']] 和 data.iloc[idx][['A', 'B']] 都可以获取第idx行的A,B列
但是!
1、 data.loc[idx,['A', 'B']]是允许的,data.iloc[idx, ['A', 'B']]则不行
2、 data.loc[1]['A'] 输出为 0, 为第一行
data.iloc[1]['A'] 输出为 3, 为第二行
原因:data.loc[idx]中的idx取的是DataFrame中第一列索引列
data.iloc[idx]中的idx取的则是DataFrame实际从上到下的行索引,0,1,2,3...
所以:
DataFrame在经过处理筛选后,若未重置索引,则使用data.loc[idx]会出现索引错误问题
而使用data.iloc[idx]则不会。