你能用loc来选择一系列的列加上一个超出范围的列吗?

时间:2018-06-01 16:44:20

标签: python python-3.x pandas dataframe

假设我想从数据框中选择一系列列:将它们称为' column_1'通过' column_60'。我知道我可以使用这样的loc: df.loc[:, 'column_1':'column_60'] 这将为我提供1-60列中的所有行。

但是,如果我想要这一系列的列加上' column_81'。这没有工作: df.loc[:, 'column_1':'column_60', 'column_81']

它引发了太多的索引者"错误。 有没有另一种方法来说明使用loc?或者在这种情况下甚至是最好的功能?

非常感谢。

4 个答案:

答案 0 :(得分:0)

怎么样

df.loc[:, [f'column_{i}' for i in range(1, 61)] + ['column_81']]

df.reindex([f'column_{i}' for i in range(1, 61)] + ['column_81'], axis=1)

如果您想填充缺失的列,如果有,则使用默认的NaN值。

答案 1 :(得分:0)

您可以使用pandas.concat():

pd.concat([df.loc[:,'column_1':'columns_60'],df.loc[:,'column_81']],axis=1)

答案 2 :(得分:0)

您可以使用numpy.r_将范围与标量组合在一起。唯一的复杂因素是您需要使用pd.DataFrame.iloc,但这可以通过df.columns.get_loc来促进。

这是一个演示:

import pandas as pd
import numpy as np

df = pd.DataFrame(columns=['column'+str(i) for i in range(1, 82)])

colidx = df.columns.get_loc

res = df.iloc[:, np.r_[colidx('column1'):colidx('column5'), colidx('column80')]]

print(res.columns)

Index(['column1', 'column2', 'column3', 'column4', 'column80'], dtype='object')

答案 3 :(得分:0)

您可以使用numpy串联函数。假设您知道可以使用的列顺序:

df.loc[:,df.columns[np.concatenate([np.arange(1,60),np.array(81)],axis=None)]]

这将为您提供数据框的1:60列和第81列。