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

Pandas调用drop(columns=[])报KeyError,但列存在于CSV与DataFrame中

解决CSV导入后列存在但无法识别的KeyError问题

问题复现

执行以下代码尝试清理市场数据:

import pandas as pd
import numpy as np

df = pd.read_csv("30mindata.csv")
df = df.drop(columns=['Volume', 'NumberOfTrades', 'BidVolume', 'AskVolume'])
print(df)

触发错误:

KeyError: "['Volume', 'NumberOfTrades', 'BidVolume', 'AskVolume'] not found in axis"

移除drop代码后,DataFrame能正常打印出包含目标列的数据:

Date       Time     Open     High      Low     Last   Volume   NumberOfTrades   BidVolume   AskVolume
0      2018/2/18   14:00:00  2734.50  2741.00  2734.00  2739.75     5304             2787        2299        3005
1      2018/2/18   14:30:00  2739.75  2741.00  2739.25  2740.25     1402              815         648         754
2      2018/2/18   15:00:00  2740.25  2743.50  2739.25  2742.00     4536             2301        2074        2462
...          ...        ...      ...      ...      ...      ...      ...              ...         ...         ...
59078  2023/2/17   12:30:00  4086.25  4088.00  4085.25  4085.75     5164             2922        2818        2346

同时使用df.loc[:, 'Volume']也会触发相同KeyError,其他文件用相同代码可正常运行。

问题原因

打印的DataFrame列名中存在隐形前后空格(比如实际列名为Volume而非Volume),CSV表头的列名可能自带空格,打印时不易察觉,但实际字符串与你传入的参数不匹配,导致匹配失败。

解决方案

  1. 读取时自动清理空格
    在pd.read_csv中添加skipinitialspace=True参数,自动忽略列名和字段前的空格:

    df = pd.read_csv("30mindata.csv", skipinitialspace=True)
    
  2. 手动清理列名
    读取后手动去除所有列名的前后空格:

    df = pd.read_csv("30mindata.csv")
    df.columns = df.columns.str.strip()  # 清理列名前后空格
    
  3. 验证列名真实性
    执行以下代码查看真实的列名列表,确认是否存在空格或其他特殊字符:

    print(df.columns.tolist())
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 09:31:05