使用:用于列表或 numpy 数组中的多个切片
Posted
技术标签:
【中文标题】使用:用于列表或 numpy 数组中的多个切片【英文标题】:Using : for multiple slicing in list or numpy array 【发布时间】:2017-04-19 14:33:33 【问题描述】:我很难弄清楚如何在列表中提取多个值,这些值间隔一些索引。例如,给定一个列表l = [0,1,2,3,4,5,6,7,8,9,10]
,我只想提取值[1,2,3] and [6,7,8,9]
。我可以写l[1:4]+l[6:-1]
,但是有没有办法写l[1:4,6:-1]
?
对于我在熊猫数据框中遇到的实际问题,这确实是一个幽灵问题。我有一个数据框df
,列有['A','B','C','I1','D','E','F','I2','I3']
,我只想保留重要的列['I1', 'I2', 'I3']
。现在,我正在做的当前方法是
df.drop(df.columns[0:3], axis=1, inplace=True)
df.drop(df.columns[4:7], axis=1, inplace=True)
有没有办法做到这一点,我们可以在 1 行中完成,而无需显式写出列值?
谢谢! PS。我知道 pandas 数据帧使用 numpy,我也没有在 numpy 中找到任何解决方法,但我认为删除列的语法是标准的 python 列表格式,如果这有意义的话。
编辑:我为 numpy 找到了一种方法,但它也是 2 行,来自 this question。我们可以这样做:indices = np.hstack((np.arange(0:3), np.arange(4:7))
df.drop(df.columns[indices], axis=1, inplace=True)
但是,我仍在寻找 1 行通用方法。
【问题讨论】:
【参考方案1】:我认为您需要 numpy.r_
来获取连接索引:
print (np.r_[1:4, 6:10])
[1 2 3 6 7 8 9]
【讨论】:
啊,我明白了!哇,index_tricks 充满了东西。所以这只适用于numpy数组?内置python没有这样的东西吗? 嗨,numpy.r_ 函数不适用于[1:4, 6:-1
],因为它没有任何 numpy 数组可供参考。这意味着我们必须使用[1:4, 6:array.shape[0]-1]
。
是的,完全正确。另一个可能的解决方案是[1:4, 6:len(array)-1]
r_
将切片扩展为索引数组。这样的数组不能用于索引列表,至少在没有循环或理解的情况下不能。
是的,但是您可以使用iloc
进行选择。【参考方案2】:
使用列表推导,您可以:
>>> [item for item in l[1:4] + l[6:-1]]
[1, 2, 3, 6, 7, 8, 9]
你也可以像这样使用extend()
:
>>> res = l[1:4]
>>> res.extend(l[6:-1])
>>> res
[1, 2, 3, 6, 7, 8, 9]
【讨论】:
以上是关于使用:用于列表或 numpy 数组中的多个切片的主要内容,如果未能解决你的问题,请参考以下文章