如何使用Pandas将嵌套JSON对象转换为扁平键值对结构?
用Pandas实现嵌套JSON字段的扁平化转换
要把嵌套结构的JSON转换成扁平的键值对格式,用Pandas可以通过以下步骤实现:
1. 确保JSON格式合法
你提供的原始JSON缺少键名的双引号,属于无效格式,需要先修正为合法JSON:
{"location": {"city": "San Francisco", "state": "CA", "country": "USA"}}
2. 用json_normalize直接扁平化加载
这是最简便的方式,json_normalize会自动解析嵌套字段,并生成带层级前缀的列名:
import pandas as pd from pandas import json_normalize # 合法的嵌套JSON数据 data = {"location": {"city": "San Francisco", "state": "CA", "country": "USA"}} # 扁平化加载数据 df = json_normalize(data) # 将列名中的点替换为下划线,得到目标格式的键名 df.columns = df.columns.str.replace('.', '_')
执行后,df的结构就是你需要的扁平格式:
location_city location_state location_country 0 San Francisco CA USA
如果要输出成JSON字符串,直接用to_json方法:
print(df.to_json(orient='records')[1:-1])
输出结果:
{"location_city":"San Francisco","location_state":"CA","location_country":"USA"}
3. 处理已存在的嵌套列DataFrame
如果你的DataFrame已经包含location列(每个元素是字典类型),可以用apply(pd.Series)展开嵌套字段,再添加前缀:
import pandas as pd # 假设已有包含嵌套列的DataFrame df = pd.DataFrame({ 'location': [{"city": "San Francisco", "state": "CA", "country": "USA"}] }) # 展开嵌套字段并添加前缀 location_flat = df['location'].apply(pd.Series).add_prefix('location_') # 合并到原DataFrame(移除原嵌套列) df = pd.concat([df.drop('location', axis=1), location_flat], axis=1)
内容的提问来源于stack exchange,提问作者Rei Rosemary
相关产品推荐
相关产品推荐

