You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Pandas删除列报错KeyError: '[7,8] not found in axis'的解决方法

解决Pandas删除列时的KeyError问题

问题代码

dataset_train=pd.read_csv('___.csv',sep=' ',header=None).drop([7,8],axis=1)
col_names = ['t1','t2','t3','t4','t5','t6','t7','t8']
dataset_train.columns=col_names
print('Shape of Train dataset: ',dataset_train.shape)
dataset_train.head()

报错信息

KeyError                                  Traceback (most recent call last)

<ipython-input-10-9c1e8c19e8a3> in <module>
----> 1 dataset_train=pd.read_csv('PM_train.csv',sep=' ',header=None).drop([7,8],axis=1)
      2 col_names = ['t1','t2','t3','t4','t5','t6','t7','t8']
      3 dataset_train.columns=col_names
      4 print('Shape of Train dataset: ',dataset_train.shape)
      5 dataset_train.head()

4 frames

/usr/local/lib/python3.9/dist-packages/pandas/core/indexes/base.py in drop(self, labels, errors)
   6659         if mask.any():
   6660             if errors != "ignore":
-> 6661                 raise KeyError(f"{list(labels[mask])} not found in axis")
   6662             indexer = indexer[~mask]
   6663         return self.delete(indexer)

KeyError: '[7, 8] not found in axis'

问题原因

报错核心是你读取的PM_train.csv文件列数不足,不存在索引为7和8的列,导致drop()方法找不到目标列抛出异常。

解决步骤

1. 先确认数据集的实际结构

先不要急于删除列,先读取数据查看列数和内容:

# 仅读取数据,不做删除操作
dataset_train = pd.read_csv('PM_train.csv', sep=' ', header=None)
# 查看数据集的行数和列数
print('数据集形状:', dataset_train.shape)
# 查看前5行数据,确认列的分布
dataset_train.head()

2. 根据实际结构删除目标列

根据上一步的结果,选择对应的操作:

  • 按实际索引删除
    替换成数据集中实际存在的列索引,比如如果数据集只有8列(索引0-7),要删除最后两列就用[6,7]:

    dataset_train = pd.read_csv('PM_train.csv', sep=' ', header=None).drop([6,7], axis=1)
    col_names = ['t1','t2','t3','t4','t5','t6']
    dataset_train.columns = col_names
    
  • 按列名删除
    先设置列名(确保列数匹配),再通过列名删除更直观:

    dataset_train = pd.read_csv('PM_train.csv', sep=' ', header=None)
    # 先截取与列名数量匹配的列
    col_names = ['t1','t2','t3','t4','t5','t6','t7','t8']
    dataset_train = dataset_train.iloc[:, :len(col_names)]
    dataset_train.columns = col_names
    # 删除指定列名的列
    dataset_train = dataset_train.drop(['t7', 't8'], axis=1)
    
  • 修正分隔符问题
    如果CSV是用多个空格分隔,sep=' '可能会解析出多余的空列,改用sep='\s+'匹配任意数量的空格:

    dataset_train = pd.read_csv('PM_train.csv', sep='\s+', header=None)
    print('修正分隔符后的数据集形状:', dataset_train.shape)
    

内容的提问来源于stack exchange,提问作者William

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 04:23:16