pd.read_csv报列数不匹配错误,如何读取行尾多逗号的CSV第52行起数据
读取末尾多逗号的CSV文件报错的解决方案
报错核心原因:pandas按文件前几行推断CSV只有2列,第52行开始每行末尾多余的逗号生成了第三列空字段,触发列数不匹配错误。你之前用的
error_bad_lines=False参数会直接跳过所有列数不匹配的行,所以52行及之后的数据全部被过滤了,才只显示到第44行。
方案1:指定读取列数(最便捷,适合仅需52行及之后数据的场景)
直接指定跳过前51行,仅读取前2列有效数据,忽略末尾多余的空列:
import pandas as pd extracted_file = pd.read_csv( filename, skiprows=51, # 跳过前51行不需要的内容 names=['serial', 'value'], # 自定义有效列的列名,可按需修改 usecols=[0, 1] # 仅读取前2列,自动忽略末尾逗号生成的多余空列 )
方案2:预处理修复CSV格式(适合需要保留全部行数据的场景)
先读取文件逐行删掉末尾的逗号,再传给pandas读取,从根源解决格式问题:
import pandas as pd from io import StringIO with open(filename, 'r', encoding='utf-8') as f: # 逐行删除末尾的逗号和换行符,再补回统一换行符 processed_lines = [line.rstrip(',\n') + '\n' for line in f] # 把处理后的文本转为文件对象供pandas读取 extracted_file = pd.read_csv(StringIO(''.join(processed_lines)))
方案3:自定义坏行处理逻辑(适配pandas 1.4+版本)
旧版error_bad_lines参数已废弃,用新版on_bad_lines参数自定义处理规则,遇到列数超标的行直接截断取前2个字段:
extracted_file = pd.read_csv( filename, on_bad_lines=lambda bad_line: bad_line[:2] )
内容的提问来源于stack exchange,提问作者kaa
相关产品推荐
相关产品推荐

