Pandas报错:Usecols与列不匹配,指定列存在为何仍报错?
问题原因及解决办法
以下是几种常见的原因和对应的解决方式:
列名存在隐藏空格或不可见字符
有时候CSV里的列名看起来是<TICKER>,但实际前后有空格、制表符或者换行符,print(df.columns)的时候这些字符不会明显显示出来,导致你指定的<TICKER>和实际列名不匹配。
可以先检查列名的真实内容:for col in df.columns: print(f"列名: '{col}',长度: {len(col)}")如果发现有多余字符,清理后再读取:
# 方式1:读取时直接清理列名 df2 = pd.read_csv('data.csv', usecols=[col.strip() for col in ['<TICKER>']]) # 方式2:先读取全量数据,清理列名后再筛选 df = pd.read_csv('data.csv') df.columns = df.columns.str.strip() df2 = df[['<TICKER>']]列名大小写不匹配
pandas的usecols参数是大小写敏感的,如果CSV里的实际列名是<ticker>或者<Ticker>,而你写的是全大写的<TICKER>,就会报错。
可以先确认列名的真实大小写,或者用忽略大小写的方式筛选:target_col = [col for col in df.columns if col.lower() == '<ticker>'.lower()][0] df2 = pd.read_csv('data.csv', usecols=[target_col])CSV表头存在特殊格式(如引号包裹)
如果CSV的表头行里,<TICKER>被双引号或单引号包裹(比如"<TICKER>"),部分情况下pandas读取全量数据时会自动解析去掉引号,但usecols指定的名称如果没带引号就会不匹配。
可以尝试直接用带引号的名称指定:df2 = pd.read_csv('data.csv', usecols=['"<TICKER>"'])或者读取时关闭引号解析:
df2 = pd.read_csv('data.csv', usecols=['<TICKER>'], quoting=3)旧版pandas的兼容性问题
某些旧版本的pandas对包含特殊字符(比如<>)的列名处理有bug,升级到最新稳定版可能解决问题:pip install --upgrade pandas
内容的提问来源于stack exchange,提问作者BuGaGa
相关产品推荐
相关产品推荐

