假设我想从数据框中选择一系列列:将它们称为' column_1'通过' column_60'。我知道我可以使用这样的loc:
df.loc[:, 'column_1':'column_60']
这将为我提供1-60列中的所有行。
但是,如果我想要这一系列的列加上' column_81'。这没有工作:
df.loc[:, 'column_1':'column_60', 'column_81']
它引发了太多的索引者"错误。 有没有另一种方法来说明使用loc?或者在这种情况下甚至是最好的功能?
非常感谢。
答案 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列。