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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 23:50:11