删除特定列的熊猫时的轴错误

时间:2019-01-21 18:53:46

标签: python pandas dataframe

基于某些分析,我确定了要选择的特定列作为模型的预测变量。我已经捕获了这些列号并将其存储在列表中。我大约有80列,并且想要遍历并删除不在此特定列表中的列。 X_train是我要在其中执行此操作的列。这是我的代码:

cols_selected = [24, 4, 7, 50, 2, 60, 46, 53, 48, 61]
cols_drop = []

for x in range(len(X_train.columns)):
    if x in cols_selected:
        pass
    else:
        X_train.drop([x])

运行此代码时,突出显示代码时遇到以下错误:X_train.drop([x]):

  

KeyError:'在轴中找不到[3]'

我确信这很简单,我很想念。我尝试将inplace = True或axis = 1语句与此一起包括在内,并且它们都具有相同的错误消息(而[]内的值随这些错误代码而改变)。

任何帮助都会很棒!

编辑:这是使此功能正常工作的补充:

cols_selected = [24, 4, 7, 50, 2, 60, 46, 53, 48, 61]
cols_drop = []

for x in range(len(X_train.columns)):
    if x in cols_selected:
        pass
    else:
        cols_drop.append(x)

X_train = X_train.drop(X_train.columns[[cols_drop]], axis=1)    

3 个答案:

答案 0 :(得分:1)

我只是想根据问题来回答:

示例DataFrame:

>>> df
   A  B   C   D
0  0  1   2   3
1  4  5   6   7
2  8  9  10  11

删除特定列BC

>>> df.drop(['B', 'C'], axis=1)
# df.drop(['B', 'C'], axis=1, inplace=True) <-- to make the change the df itself , use inplace=True
   A   D
0  0   3
1  4   7
2  8  11

如果您要按列号(Dropping by index)删除它们,请尝试如下操作:

>>> df.drop(df.columns[[1, 2]], axis=1)
   A   D
0  0   3
1  4   7
2  8  11

OR

>>> df.drop(columns=['B', 'C'])
   A   D
0  0   3
1  4   7
2  8  11

答案 1 :(得分:1)

此外,除了@pygo指出df.drop使用关键字arg来指定轴之外,请尝试以下操作:

X_train = X_train[[col for col in X_train.columns if col in cols_selected]] 

这里是一个例子:

>>> import numpy as np
>>> import pandas as pd
>>> cols_selected = ['a', 'c', 'e']
>>> X_train = pd.DataFrame(np.random.randint(low=0, high=10, size=(20, 5)), columns=['a', 'b', 'c', 'd', 'e'])
>>> X_train
    a  b  c  d  e
0   4  0  3  5  9
1   8  8  6  7  2
2   1  0  2  0  2
3   3  8  0  5  9
4   5  9  7  8  0
5   1  9  3  5  9 ...
>>> X_train = X_train[[col for col in X_train.columns if col in cols_selected]]
>>> X_train
    a  c  e
0   4  3  9
1   8  6  2
2   1  2  2
3   3  0  9
4   5  7  0
5   1  3  9 ...

答案 2 :(得分:1)

根据drop的文档:

  

通过指定标签名称和相应的内容来删除行或列   轴,或直接指定索引或列名

不能仅通过使用列的索引来删除列。您需要列的名称。同样,必须将axis参数设置为1columnsX_train.drop([x])替换X_train=X_train.drop(X_train.columns[x], axis='columns')才能使示例工作。