如何在熊猫中切割连续和不连续的指数?

时间:2017-04-04 12:06:29

标签: pandas

pandas iloc可以将数据框切割为两种情况,例如df.iloc[:,2:5]df.iloc[:,[6,10]]。 如果我想选择2:5, 6 and 10列,如何使用iloc来切片df

2 个答案:

答案 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.0it seems新版本即将推出 - 4月份,因此使用iloc会更好。