如何在pandas中读取含多对象的ACN充电JSON并展开userInputs
解决ACN充电数据集userInputs字段展开到DataFrame单行的问题
核心方案是用pandas内置的json_normalize()函数,它专门处理嵌套JSON结构,能直接把userInputs里的键值对展开成DataFrame的独立列,不用手动遍历处理。
典型ACN数据结构(_items中的单条记录)
{ "_id": "abc123", "sessionID": "sess_456", "userInputs": { "requestedDeparture": "2023-10-01T18:00:00Z", "requestedEnergy": 50, "paymentMethod": "credit_card" }, "startTime": "2023-10-01T12:00:00Z", "endTime": "2023-10-01T17:30:00Z" }
修正后的代码
假设你之前仅提取了_items但未处理嵌套字段,改成下面的写法即可:
import pandas as pd import json # 读取JSON文件 with open('acn_charging_data.json', 'r') as f: raw_data = json.load(f) # 用json_normalize直接展开嵌套的userInputs # 自动保留所有顶层字段,同时把userInputs内的内容拆成独立列 df = pd.json_normalize(raw_data['_items']) # 可选:给展开的字段加前缀避免重名,比如将userInputs.requestedDeparture改为userInputs_requestedDeparture # df = pd.json_normalize(raw_data['_items'], sep='_')
效果说明
处理完成后,userInputs里的每个键都会成为DataFrame的独立列(比如userInputs.requestedDeparture),对应的数据会和当前充电记录的其他字段处于同一行,完全满足需求。
特殊情况处理(若userInputs为数组)
如果部分记录的userInputs是数组(比如用户多次提交输入),可以指定record_path展开数组,同时用meta保留其他核心字段:
df = pd.json_normalize( raw_data['_items'], record_path='userInputs', # 展开userInputs数组中的每个元素 meta=['_id', 'sessionID', 'startTime'] # 保留顶层关键字段 )
内容的提问来源于stack exchange,提问作者gondev
相关产品推荐
相关产品推荐

