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

Pandas pd.read_csv指定sep=';'无法获取列对应值问题求助

CSV文件读取问题解决方案

问题描述

我正在开发一个批量读取多CSV文件、在指定时间范围汇总特定值的程序,待处理CSV采用分号(;)作为分隔符。使用以下代码读取文件:

df = pd.read_csv(file_path, sep=";", index_col=0)

# 查找与目标列最接近的列
closest_column = find_closest_column(df, target_column)

if closest_column:
    # 假设'Recipe'和最接近的列格式正确,继续分组
    # grouped_df = df.groupby("Recipe")[closest_column].sum().reset_index()
    print(f"\nFile: {file_path}, Closest Column: {closest_column}\n")
else:
    print(f"\nFile: {file_path}中未找到与'{target_column}'相似的列\n")

将其中一个文件分隔符改为逗号后,程序仅能识别逗号分隔文件的列值(输出列名带值),分号分隔文件仅能识别列名,无法获取对应值:

File: C:\Users\nw\Documents\Mini projects\CSV\test\656062f4cd3a83000200000a.csv, Closest Column: Total volume[m3],"0.1"


File: C:\Users\nw\Documents\Mini projects\CSV\test\99-Card.csv, Closest Column: Total volume[m�]

调整sep/delimiter参数后问题仍未解决,需解决分号分隔CSV文件的数值读取问题。

解决方案

  • 指定正确的文件编码
    分号分隔文件可能存在编码不匹配(如Windows下常见的GBK或UTF-8带BOM),读取时显式指定编码:

    df = pd.read_csv(file_path, sep=";", index_col=0, encoding='utf-8-sig')
    

    若仍有乱码,尝试encoding='gbk'。

  • 处理引号包裹的内容
    部分CSV会用引号包裹列名或值,需指定引号处理规则,先导入csv模块:

    import csv
    df = pd.read_csv(file_path, sep=";", index_col=0, quoting=csv.QUOTE_ALL, encoding='utf-8-sig')
    

    可根据文件实际情况选择csv.QUOTE_MINIMAL或csv.QUOTE_NONNUMERIC。

  • 手动指定列名读取
    若自动识别列名失败,先读取第一行作为列名,再加载数据:

    with open(file_path, 'r', encoding='utf-8-sig') as f:
        headers = f.readline().strip().split(';')
    df = pd.read_csv(file_path, sep=";", names=headers, skiprows=1, index_col=0)
    
  • 处理混合分隔符
    若文件存在分号、逗号混合的情况,用正则匹配分隔符(需指定engine='python'):

    df = pd.read_csv(file_path, sep='[;,]', engine='python', index_col=0, encoding='utf-8-sig')
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 01:57:22