使用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
相关产品推荐
相关产品推荐

