使用pandas读取CSV文件遇ParserError,求解决方法
解决pd.read_csv的ParserError字段数不匹配问题
你遇到的ParserError核心原因不是空白行,而是第54行的内容格式异常——该行被解析出2个字段,但文件其他行均为1个字段,导致pandas无法统一解析结构。以下是具体解决方案:
方案1:定位并修复错误行
先手动检查第54行的内容,确认是否误输入了分隔符(比如逗号、制表符)导致字段拆分异常:
with open('datawisata.csv', 'r', encoding='utf-8') as f: lines = f.readlines() print(lines[53]) # Python列表是0索引,第54行对应索引53
修正该行格式后,再用原代码读取即可。
方案2:让pandas容忍字段不匹配的行
如果不需要保留错误行,可使用on_bad_lines参数(pandas 1.3.0及以上版本支持)跳过或警告错误行:
- 直接跳过错误行:
df = pd.read_csv('datawisata.csv', skip_blank_lines=False, on_bad_lines='skip')
- 仅警告不中断解析:
df = pd.read_csv('datawisata.csv', skip_blank_lines=False, on_bad_lines='warn')
方案3:强制按最大字段数解析所有行
如果需要保留错误行的内容,可先计算文件中最大字段数,再统一列结构:
# 先统计最大字段数(假设分隔符为逗号,根据实际修改) max_cols = 0 with open('datawisata.csv', 'r', encoding='utf-8') as f: for line in f: current_cols = len(line.strip().split(',')) if current_cols > max_cols: max_cols = current_cols # 按最大字段数读取文件 df = pd.read_csv('datawisata.csv', skip_blank_lines=False, names=[f'col{i+1}' for i in range(max_cols)])
关于空白数据替换的问题
不需要提前将空白替换为“blank”。skip_blank_lines=False会保留空白行,pandas默认将空白行的字段值设为NaN,若需要统一替换为“blank”,可在读取后执行:
df.fillna('blank', inplace=True)
内容的提问来源于stack exchange,提问作者Jessen Jie
相关产品推荐
相关产品推荐

