Python Pandas提取嵌套JSON指定字段的技术求助
解决Pandas提取嵌套JSON中关联字段的问题
Hey Arek,作为Python新手遇到嵌套JSON的提取问题太正常了,我来帮你捋清楚怎么把idDriver和vehicle里的licensePlate放到同一行!
为什么你之前的方法失败了?
你尝试用record_path=['identifications','vehicle']的时候,相当于直接把遍历层级跳到了vehicle节点,这时候meta=['idDriver']会试图在每个vehicle对象里找idDriver(显然找不到),所以没法关联到顶层的idDriver,自然就失败啦。
最简单的解决方案(适合新手理解)
我们可以分两步走:先展开identifications层级关联顶层idDriver,再从嵌套的vehicle字典里提取licensePlate:
import pandas as pd import json # 假设你已经从API加载好了json_data(这里用你的示例数据模拟) json_data = json.loads(""" { "idDriver": "100001", "defaultTripType": "private", "fleetManagerRole": null, "identifications": [ { "code": "90-00-00-77-20", "from": "2019-08-08T10:38:15Z", "rawId": "", "vehicle": { "isBusinessCar": "0", "id": "10000", "licensePlate": "ABCD", "class": "Suziki 1.6 CDTI" } } ] } """) # 第一步:展开identifications,关联顶层的idDriver workdata = pd.json_normalize(json_data, record_path=['identifications'], meta=['idDriver']) # 第二步:从vehicle列的字典中提取licensePlate # 用get()方法更安全,避免如果vehicle为空时抛出KeyError workdata['licensePlate'] = workdata['vehicle'].apply(lambda x: x.get('licensePlate')) # 第三步:只保留你需要的列(可选) final_data = workdata[['idDriver', 'licensePlate']] print(final_data)
运行这段代码后,你会得到想要的结果:
idDriver licensePlate 0 100001 ABCD
进阶:一步用json_normalize展开嵌套字段
如果你想一步到位,也可以通过指定相对路径的meta参数来关联顶层idDriver,同时直接展开vehicle的字段:
workdata = pd.json_normalize( json_data['identifications'], # 用['..', 'idDriver']表示回到上上层(顶层)取idDriver meta=[['..', 'idDriver']], # 给vehicle的字段加前缀,避免和其他字段重名 record_prefix='vehicle_' ) # 重命名列名让它更友好 workdata.rename(columns={'..idDriver': 'idDriver', 'vehicle_licensePlate': 'licensePlate'}, inplace=True) final_data = workdata[['idDriver', 'licensePlate']]
这个方法更简洁,但相对路径的写法需要你对JSON层级有清晰的理解,新手可以先从第一种方法入手哦!
内容的提问来源于stack exchange,提问作者arhetyp
相关产品推荐
相关产品推荐

