如何对熊猫的连续和不连续指数进行切片



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 .

最新更新