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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 03:10:09