从选择了范围和特定列的数据框中切片列
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
包括最后一项(指定的最后一列)将被纳入选择)。
我们知道我们可以使用 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
包括最后一项(指定的最后一列)将被纳入选择)。