基于某些分析,我确定了要选择的特定列作为模型的预测变量。我已经捕获了这些列号并将其存储在列表中。我大约有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)
答案 0 :(得分:1)
我只是想根据问题来回答:
示例DataFrame:
>>> df
A B C D
0 0 1 2 3
1 4 5 6 7
2 8 9 10 11
删除特定列B
和C
:
>>> 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
参数设置为1
或columns
用X_train.drop([x])
替换X_train=X_train.drop(X_train.columns[x], axis='columns')
才能使示例工作。