如何解决pandas导入行分隔JSON格式TXT文件的报错问题
行分隔JSON格式TXT的pandas导入解决方案
报错根因
你遇到的三类报错,本质是常规读取函数和行分隔JSON(NDJSON/JSON Lines)的格式不匹配:
pd.read_csv报ParserError:该方法默认将逗号作为字段分隔符,会把JSON对象内部的逗号误判为表格字段分隔标记,遇到嵌套结构更复杂、逗号数和前置行不一致的行,就会抛出“字段数不匹配”的C解析错误。pd.read_json报Trailing data:该方法默认按标准JSON结构(整文件为大JSON数组)解析,逐行独立存储JSON对象的文件不符合这个默认结构,就会被判定为存在尾部多余数据触发报错。pd.read_fwf读出来列错位:该方法是按固定文本宽度切分列,完全没有JSON键值解析能力,自然会出现列名嵌在数据块、排布和预期不符的问题。
正确导入方法
方法1:用pandas原生参数直接读取(优先推荐)
read_json本身支持行分隔JSON格式,只是需要手动开启对应模式,核心是添加lines=True参数,告诉pandas逐行解析独立JSON对象:
df = pd.read_json( "df.txt", lines=True, orient="records" )
如果还是存在少量解析报错,大概率是文件存在空行、个别行JSON格式损坏,可以加上异常行跳过参数提升兼容性:
# 分块读取,自动跳过解析失败的异常行 chunk_reader = pd.read_json( "df.txt", lines=True, chunksize=1000, on_bad_lines="skip" ) # 合并分块读取的结果为完整DataFrame df = pd.concat(chunk_reader)
方法2:逐行手动解析兜底(适合文件损坏较严重的场景)
如果内置参数读取还是频繁报错,可以逐行读取文件、手动解析JSON后再生成DataFrame,适配性最强:
import json import pandas as pd records = [] # 按编码打开文件逐行读取 with open("df.txt", "r", encoding="utf-8") as f: for line in f: clean_line = line.strip() # 跳过空行避免解析报错 if not clean_line: continue try: # 逐行解析JSON为字典 records.append(json.loads(clean_line)) except json.JSONDecodeError: # 遇到格式错误的行直接跳过,也可自定义记录异常行位置 continue # 把所有解析后的记录转成DataFrame df = pd.DataFrame(records)
常见注意事项
- 不要用
read_csv、read_fwf硬读JSON类文本,两类方法是为纯分隔/固定宽度的结构化表格设计的,不具备JSON解析能力,长期使用一定会出现字段错位、解析报错的问题。 - 如果文件存在中文,需要根据实际编码(如gbk、gb18030)手动指定读取的
encoding参数,避免出现乱码。 - 如果单行JSON存在嵌套结构,读取后对应列会存储字典/列表类型,可根据后续分析需求单独展开,不需要在读取阶段做特殊处理。
内容的提问来源于stack exchange,提问作者codelearner0504
相关产品推荐
相关产品推荐

