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

使用Pandas读取CSV文件遇解析错误及数据结构化问题求助

解决Pandas读取CSV的ParserError与KeyError问题

1. 先确定文件的实际分隔符

你的文件不是逗号分隔,且用sep=';'无效,先自动检测分隔符:

import csv
import pandas as pd

with open("你的文件名.csv", "r", encoding="utf-8") as f:
    # 读取前1024字节来检测格式
    dialect = csv.Sniffer().sniff(f.read(1024))
print(f"检测到的分隔符: {dialect.delimiter}")

常见的非逗号分隔符有制表符\t、竖线|等,Excel导出的CSV有时会用制表符。

2. 预览数据结构,确认表头与数据起始行

先读取前20行(避免全量读取出错),查看数据的实际格式:

df = pd.read_csv(
    "你的文件名.csv",
    nrows=20,
    engine="python",  # Python引擎对格式错误容忍度更高
    sep=dialect.delimiter  # 用第一步检测到的分隔符
)
print(df)

从输出里确认:

  • 哪一行是真正的表头(比如第5行是表头,对应header=4)
  • 前面有多少行无关内容需要跳过(比如前4行是注释,对应skiprows=4)
  • 列名的实际写法(比如是date还是Date,是否带空格)

3. 正确读取数据

根据预览结果设置参数,比如:

df = pd.read_csv(
    "你的文件名.csv",
    sep=dialect.delimiter,
    header=4,  # 假设表头在第5行(索引从0开始)
    skiprows=range(0,4),  # 跳过前4行无关内容
    engine="python",
    on_bad_lines="warn"  # 对格式错误的行发出警告而非直接报错
)

读取后查看列名,确认是否包含Date和[m3]Volume:

print(df.columns.tolist())

4. 解决KeyError问题

如果列名和你预期的不一致:

  • 比如列名是小写的date,或者带空格的Date ,直接重命名列:
df.rename(
    columns={
        "原日期列名": "Date",
        "原体积列名": "[m3]Volume"
    },
    inplace=True
)
  • 确认列名正确后再执行绘图代码:
import matplotlib.pyplot as plt
df.plot(x='Date', y='[m3]Volume')
plt.show()

额外处理:合并单元格导致的格式问题

如果文件存在Excel合并单元格(比如某几行只有一个字段),可以用on_bad_lines='skip'跳过错误行,或者手动处理缺失值:

df = pd.read_csv(
    "你的文件名.csv",
    sep=dialect.delimiter,
    header=4,
    skiprows=range(0,4),
    engine="python",
    on_bad_lines="skip"
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 06:35:08