You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ubuntu下Pandas1.4.3如何读取records格式的JSON DataFrame?

问题

在Ubuntu系统中使用Python 3.8及Pandas 1.4.3版本,将机器学习训练用的DataFrame以orient='records'格式导出为JSON文件时,设置了lines=True和indent=4参数提升可读性,但使用pd.read_json(path_or_buf=filename, orient='records')读取时报错。

示例代码:

filename='train_data.json'
train_data.to_json(path_or_buf=filename, orient='records', lines=True, indent=4)
pd.read_json(path_or_buf=filename, orient='records') # 执行报错

需求:

  • 如何读取得到与原DataFrame完全一致的结果(不含索引、无额外无名列);
  • 能否实现读写解耦,让读取方法不依赖导出时的lines和indent参数(生产环境读写可能在不同进程)。
解决方案

需求1:正确读取导出的JSON文件

导出时启用了lines=True,生成的是每行一个JSON对象的JSON Lines格式,但读取时未对应设置该参数,导致解析失败。只需在读取时加上lines=True即可:

pd.read_json(path_or_buf=filename, orient='records', lines=True)

执行后就能得到和原DataFrame完全一致的结果,不会包含原索引或额外无名列。

需求2:实现读写解耦

要让读写逻辑不依赖导出时的lines和indent参数,需要约定统一的标准格式,以下两种方案均可:

方案1:使用标准JSON数组格式

导出时不设置lines=True,生成标准的JSON数组格式,indent=4仅用于提升可读性,不影响读取逻辑:

# 导出代码
train_data.to_json(path_or_buf=filename, orient='records', indent=4)
# 读取代码(无需关心indent参数)
pd.read_json(path_or_buf=filename, orient='records')

这种格式是通用的JSON结构,只要双方约定orient='records',读取时无需额外参数,完全解耦indent和lines。

方案2:固定使用JSON Lines格式

如果因数据量等原因必须用JSON Lines格式,可约定读写都启用lines=True,此时导出时的indent=4不会影响读取(Pandas解析时会自动忽略缩进):

# 导出代码
train_data.to_json(path_or_buf=filename, orient='records', lines=True, indent=4)
# 读取代码(只需约定orient和lines参数)
pd.read_json(path_or_buf=filename, orient='records', lines=True)

只要双方预先约定好orient='records'和lines=True,不管导出时是否设置indent,读取都能正常工作,实现解耦。

内容的提问来源于stack exchange,提问作者Della

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 10:30:29