Python列表或pandas数据帧任意索引和切片

时间:2016-09-08 23:42:24

标签: python r pandas numpy slice

我在工作中广泛使用了R和Python,有时我觉得它们之间的语法混乱。

在R中,如果我只想从我的数据集的 某些 功能创建模型,我可以这样做:

subset = df[1:1000, c(1,5,14:18,24)]

这将占用前1000行(是的,R从索引1开始),它将需要第1,第5,第14 第18和第24列

我尝试过slicerange和类似功能的任意组合,并且无法复制这种灵活性。最后,我只列举了所有的值。

如何在Python中完成?

  

从列表中选择一个元素的任意子集,其中一些是单独选择的(如上面显示的逗号),另一些是按顺序选择的(如上面显示的冒号)?

3 个答案:

答案 0 :(得分:3)

index_tricks的文件中,numpy定义了一个类实例,它使用r_方法将标量和切片转换为枚举列表:

In [560]: np.r_[1,5,14:18,24]
Out[560]: array([ 1,  5, 14, 15, 16, 17, 24])

这是一个带有__getitem__方法的实例,因此它使用索引语法。它将14:18扩展为np.arange(14,18)。它还可以使用linspace扩展值。

所以我认为你会改写

subset = df[1:1000, c(1,5,14:18,24)]

作为

df.iloc[:1000, np.r_[0,4,13:17,23]]

答案 1 :(得分:2)

您可以在pandas中使用iloc进行整数索引:

df.iloc[0:10000, [0, 4] + range(13,18) + [23]]

由@root评论,在Python 3中,您需要range()

明确地将df.iloc[0:10000, [0, 4] + list(range(13,18)) + [23]]转换为列表

答案 2 :(得分:1)

试试这个,第一个方括号过滤器。第二组方括号切片。

df[[0,4]+ range(13,18)+[23]][:1000]