【问题标题】:Axis error when dropping specific columns Pandas删除特定列 Pandas 时出现轴错误
【发布时间】:2020-12-28 12:18:54
【问题描述】:

我已根据一些分析确定了我想选择作为我的模型的预测变量的特定列。我已经捕获了这些列号并将其存储在一个列表中。我大约有 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] not found in axis'

我确信这是我所缺少的非常简单的东西。我尝试将 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)    

【问题讨论】:

  • 你说的数据集没有可见性,你能告诉我们DataFrame结构吗?

标签: python pandas dataframe


【解决方案1】:

根据drop的文档:

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

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

【讨论】:

  • 感谢您回来。运行此代码,但尽管运行它似乎并没有删除任何列。
  • 您需要在每次挂断电话后将结果分配给 X_train
【解决方案2】:

我只是根据问题小假设:

示例数据框:

>>> 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

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

【讨论】:

    【解决方案3】:

    另外,除了@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 ...
    

    【讨论】:

    • 感谢您回来。运行此代码,但它返回的数据框包含一列和一些我无法识别的值。
    • 哦,好吧。好吧,如果对您有帮助,我发布了一个简单的示例 - 您的代码中可能存在另一个错误。
    猜你喜欢
    • 2020-09-30
    • 2017-08-08
    • 2023-03-22
    • 1970-01-01
    • 2014-01-10
    • 2023-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多