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表头的列名可能自带空格,打印时不易察觉,但实际字符串与你传入的参数不匹配,导致匹配失败。
解决方案
读取时自动清理空格
在pd.read_csv中添加skipinitialspace=True参数,自动忽略列名和字段前的空格:df = pd.read_csv("30mindata.csv", skipinitialspace=True)手动清理列名
读取后手动去除所有列名的前后空格:df = pd.read_csv("30mindata.csv") df.columns = df.columns.str.strip() # 清理列名前后空格验证列名真实性
执行以下代码查看真实的列名列表,确认是否存在空格或其他特殊字符:print(df.columns.tolist())
内容的提问来源于stack exchange,提问作者Shlekht
相关产品推荐
相关产品推荐

