从选择了范围和特定列的数据框中切片列

Slicing columns from a dataframe with range and specific columns selected

我们知道我们可以使用 loc 和 iloc 函数对数据帧列进行切片。但是我们需要 select 数据框中的某些列可能很复杂。如果数据框的列太多,它可能涉及不同数量的列。提及它们中的每一个的名称或索引号可能不利于代码的可读性。

滑动一系列列:

df.loc[:,'col1':'col5']
df.iloc[:,0:5]

至select 个特定列:

df.loc[:,['col1','col3','col7']]
df.loc[:,[0,2,6]]

但是如果我们想两者都做呢?

假设我们需要 select 这些列 [1,3,7,8,9,10,11,12,17,18,19,20,26,40]

专门编写所有这些列名称或索引是一种方法。还有其他(更短的)方法吗?

我们可以混合使用范围函数和列表添加来执行此操作,而无需编写每个列名称或索引。

df.iloc[:,list(range(7,13))+list(range(17,21))+[1,3,26,40]]

这样我们就可以在列中混合范围并将特定列添加到 iloc 函数的选定列列表中。

我们可以做到:

f = df.columns.get_loc
df.iloc[:, np.r_[f(1), f(3), f(7):f(9), f(10):f(12), f(17):f(20), f(26), f(40)]] #get both single cols and ranges of cols

请注意,我们也可以使用列名,例如f('Col1name'):f('Col5name').

还要记住 iloc 不包括最后一项(在上面的示例中,返回的最后一列将是 'Col4Name'),而 loc 包括最后一项(指定的最后一列)将被纳入选择)。