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

如何将pandas嵌套JSON中Quotes字段转换为DataFrame?

嵌套JSON转pandas DataFrame解决方案

你之前代码的错误点:json_normalize的第三个参数meta用于指定JSON顶层需要同步附加到每行的字段,而QuoteId、MinPrice等本身就是Quotes数组内的子字段,不需要在meta中声明,json_normalize处理数组时会自动提取这些同级字段。

基础实现(仅提取Quotes数组为DataFrame)

直接将Quotes数组传入json_normalize即可,嵌套的OutboundLeg字段会被自动展开:

import pandas as pd
import json

# 读取本地JSON文件
with open('myJson.json', encoding='utf-8') as data_file:    
    data = json.load(data_file)  

# 规范化Quotes数组为DataFrame
df = pd.json_normalize(data['Quotes'])

运行后得到的DataFrame默认包含以下列:

  • QuoteId
  • MinPrice
  • Direct
  • QuoteDateTime
  • OutboundLeg.CarrierIds
  • OutboundLeg.OriginId
  • OutboundLeg.DestinationId
  • OutboundLeg.DepartureDate

如果需要移除列名中的OutboundLeg.前缀,可执行以下代码:

df.columns = df.columns.str.replace('OutboundLeg.', '', regex=False)

进阶实现(关联映射表补全业务字段)

原始JSON中还包含Carriers、Places等映射表,可通过字典映射把ID替换为可读的业务名称:

# 构造航空公司ID到名称的映射字典
carrier_map = {item['CarrierId']: item['Name'] for item in data['Carriers']}
# 构造地点ID到名称的映射字典
place_map = {item['PlaceId']: item['Name'] for item in data['Places']}

# 补全航空公司、出发地、目的地名称
df['CarrierName'] = df['OutboundLeg.CarrierIds'].apply(lambda x: carrier_map[x[0]])
df['OriginName'] = df['OutboundLeg.OriginId'].map(place_map)
df['DestinationName'] = df['OutboundLeg.DestinationId'].map(place_map)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.17 13:06:03