使用json_normalize处理嵌套JSON无法获取pkey、code等全部字段
问题根因
你现有代码的问题出在数据拼接逻辑错误:
- 直接将包含
instrument对象、mappings数组的顶层JSON结构转为DataFrame,得到的行索引和单独对mappings字段规范化得到的行索引无法对齐,concat拼接后自然会出现字段缺失 - 没有在规范化JSON时指定需要关联提取的顶层非数组字段,导致
instrument下的属性和mappings下的字段无法对应到同一行
修复后代码
import json import pandas as pd import urllib URL = "https://dsv.ihsmvals.com/instruments/v2.0/mappings/instruments/all/provider/pv/system/holidays" response = urllib.request.urlopen(URL) text = response.read() json_data = json.loads(text) # 直接一次性规范化所有需要的字段,record_path指定数组字段,meta指定要关联的顶层嵌套字段 df = pd.json_normalize( json_data, record_path='mappings', meta=[ ['instrument', 'instrumentId'], ['instrument', 'instrumentSymbol'], ['instrument', 'instrumentType'], ['instrument', 'created'] ] ) df.to_csv("output.csv", encoding='utf-8-sig', index=False)
效果说明
运行以上代码后,输出的CSV会自动包含pkey、code(规范化后列名为mapping.code)、provider等所有mappings下的字段,同时会附带关联的instrument下的所有指定属性,不需要额外拼接操作。
内容的提问来源于stack exchange,提问作者Naina
相关产品推荐
相关产品推荐

