MSNoise执行plot dvv时pandas读取CSV报ParserError问题求助
问题根源分析
- 第一个
pandas.errors.ParserError报错的直接原因:你要读取的某一个日期TXT文件的第114行出现格式损坏,大概率是存在多余逗号、两行内容拼接、文件写入异常等问题,导致原本应该匹配表头的8个字段变成了15个,pandas解析失败。 - 后续加
error_bad_lines=False后出现的TypeError报错原因:跳过坏行的过程中,部分行的日期列解析失败,没有被转成Timestamp类型,最终拼接的数据集索引里同时存在Timestamp类型和字符串类型,重采样时无法对两种不同类型的索引做排序比较,触发报错。
两类数据格式一致但只有一类报错,是因为另一类数据的所有TXT文件都没有出现这种单行损坏的情况,此前能正常运行说明对应文件是近期才被意外修改/存储时出现了IO错误(比如磁盘写入中断、坏块等)。
排查与解决步骤
方案1:修复源文件(最推荐,无遗留问题)
- 按照代码中的文件路径规则定位问题文件:
DTT/[filterid编号]/[mov_stack数值]_DAYS/[分量名]/[报错对应日期].txt - 打开该文件找到第114行,修正格式使其和其他正常行保持8个字段的结构,不重要的异常行可以直接删除;如果有原始备份直接替换该损坏文件即可。
- 移除
pd.read_csv中添加的error_bad_lines=False参数,重新运行即可。
方案2:修改代码兼容异常文件
如果无法修复源文件,可以调整读取逻辑避免报错,适配你使用的Python2.7+旧版pandas环境的代码示例:
df = pd.read_csv( day, header=0, index_col=0, parse_dates=True, error_bad_lines=False, warn_bad_lines=False, usecols=range(8) # 强制只读取前8个字段,忽略多余的异常字段 ) # 强制统一索引为datetime类型,删除解析失败的无效行 df.index = pd.to_datetime(df.index, errors='coerce') df = df[df.index.notnull()]
内容的提问来源于stack exchange,提问作者Joe
相关产品推荐
相关产品推荐

