pandas
iloc
可以将数据框切割为两种情况,例如df.iloc[:,2:5]
和df.iloc[:,[6,10]]
。
如果我想选择2:5, 6 and 10
列,如何使用iloc
来切片df
?
答案 0 :(得分:3)
使用numpy.r_:
来自docs:
将切片对象转换为沿第一轴的连接。
这是一种快速构建阵列的简单方法。有两种用途 例。
如果索引表达式包含逗号分隔数组,则堆栈 他们沿着他们的第一轴。
如果索引表达式包含切片 符号或标量然后创建一个具有指示范围的一维数组 切片表示法。
演示:
In [16]: df = pd.DataFrame(np.random.rand(3, 12))
In [17]: df.iloc[:, np.r_[2:5, 6, 10]]
Out[17]:
2 3 4 6 10
0 0.760201 0.378125 0.707002 0.310077 0.375646
1 0.770165 0.269465 0.419979 0.218768 0.832087
2 0.253142 0.737015 0.652522 0.474779 0.094145
In [18]: df
Out[18]:
0 1 2 3 4 5 6 7 8 9 10 11
0 0.668062 0.581268 0.760201 0.378125 0.707002 0.249094 0.310077 0.336708 0.847258 0.705631 0.375646 0.830852
1 0.521096 0.798405 0.770165 0.269465 0.419979 0.455890 0.218768 0.833776 0.862483 0.817974 0.832087 0.958174
2 0.211815 0.747482 0.253142 0.737015 0.652522 0.274231 0.474779 0.256119 0.110760 0.224096 0.094145 0.525201
更新:从Pandas 0.20.1 the .ix indexer is deprecated, in favor of the more strict .iloc and .loc indexers开始。
所以我更新了我的答案,以便修复已弃用的功能:已更改.ix[]
- > df.iloc[...]
答案 1 :(得分:1)
我认为你需要numpy.r_
来获得concanecate指数,然后iloc
来选择位置:
ds = pd.DataFrame({'A':[1,2,3],
'B':[4,5,6],
'C':[7,8,9],
'D':[1,3,5],
'E':[5,3,6],
'F':[7,4,3],
'G':[1,3,5],
'H':[5,3,6],
'I':[4,4,3],
'J':[6,4,3],
'K':[9,4,3]})
print (ds)
A B C D E F G H I J K
0 1 4 7 1 5 7 1 5 4 6 9
1 2 5 8 3 3 4 3 3 4 4 4
2 3 6 9 5 6 3 5 6 3 3 3
print (np.r_[2:5, 6,10])
[ 2 3 4 6 10]
print (ds.iloc[:, np.r_[2:5, 6,10]])
C D E G K
0 7 1 5 1 9
1 8 3 3 3 4
2 9 5 6 5 3
讨论:
ix
vs iloc
- 主要问题是ix
will be deprecated in Pandas 0.20.0。 it seems新版本即将推出 - 4月份,因此使用iloc
会更好。