pandas
iloc
可以对数据帧进行两种情况切片,例如df.iloc[:,2:5]
和df.iloc[:,[6,10]]
。如果我想选择2:5, 6 and 10
列,如何使用iloc
来切片df
?
numpy.r_使用:
从文档中:
将切片对象转换为沿第一个轴串联。
这是快速构建阵列的简单方法。有两种用途例。
如果索引表达式包含逗号分隔的数组,则堆栈他们沿着他们的第一个轴。
如果索引表达式包含切片符号或标量然后创建一个一维数组,其范围由切片表示法。
演示:
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开始,.ix索引器被弃用,取而代之的是更严格的.iloc和.loc索引器。
所以我更新了我的答案以修复那个不推荐使用的功能:更改.ix[]
--> df.iloc[...]
我认为您需要numpy.r_
用于合并索引,然后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
将在 Pandas 0.20.0 中弃用。而且似乎新版本很快就会到来 - 在四月,所以更好地使用 iloc
.