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

json.load读取JSON文件报错,pandas.read_json加载后address嵌套字段如何拆分列?

嵌套JSON字段拆分解决方法

你最开始遇到的JSONDecodeError报错原因:你的源文件为行分隔JSON格式(JSON Lines),每个JSON对象独立占一行,整个文件不属于单个合法JSON结构,因此直接调用json.load()读取会识别到首行JSON结束后仍有额外数据,抛出错误。使用pd.read_json()加lines=True参数是适配该格式的正确写法。

针对嵌套address列的拆分需求,可选用以下两种实现方案:

方案1:基于已读取的DataFrame直接拆分

适合已经将数据加载到DataFrame的场景,仅需对address列做转换后合并即可:

# 将address列的每一个字典元素转换为Series,自动生成对应字段列
address_expand = df['address'].apply(pd.Series)
# 合并展开后的地址列到原DataFrame,同时删除原address列
df = pd.concat([df.drop(columns=['address']), address_expand], axis=1)

执行后原address列的region、street-address、postal-code、locality四个字段会直接作为独立列加入DataFrame。

方案2:读取阶段直接展开嵌套结构

数据量较大时推荐该方案,使用pd.json_normalize()一次性完成嵌套字段解析,性能更优:

import json
import pandas as pd

# 逐行加载所有JSON对象到列表
with open('offering.txt', 'r', encoding='utf-8') as f:
    json_list = [json.loads(line.strip()) for line in f if line.strip()]

# 解析嵌套结构直接生成扁平化DataFrame
df = pd.json_normalize(json_list)

该方法默认生成的地址列会带address.前缀(如address.region、address.street-address),如果不需要前缀可添加sep=''参数,或后续自行重命名列名即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.12 22:21:04