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

pandas中修改字典对象格式 实现JSON结构转换及字段计算

处理方法

核心要先解决原始返回里parameters字段存的是字符串形式的Python字典、不是原生结构化对象的问题,再按要求重组结构、计算聚合字段,步骤如下:

  • 先解析外层标准JSON,取出数组里的单条记录
  • 安全解析parameters下的字典字符串,不要直接替换引号强转JSON,避免内容里带单引号时解析失败,用标准库ast.literal_eval做解析最稳妥
  • 把原来的参数列表重组为param1、param2格式的键值对
  • 按条件计算聚合字段:所有参数都带caloriesBurned键时才统计总卡路里,总时长按分钟转毫秒对齐你给出的示例值
import json
import ast

# 替换为你实际拿到的API返回内容
raw_response = '''[{"individual_id":"abcd1234","start_time":"2022-03-01 10:08:00","end_time":"2022-03-01 10:12:00","duration_minutes":4.0,"event_name":"activity","source":"Ple;fitbit;fitbit","parameters":["{'duration': 68.0, 'caloriesBurned': 15, 'activityName': 'Run', 'distance': 0, 'distanceUnit': 'Kilometer', 'activityLevel': [{'minutes': 0, 'name': 'sedentary'}, {'minutes': 0, 'name': 'lightly'}, {'minutes': 0, 'name': 'fairly'}, {'minutes': 0, 'name': 'very'}]}","{'duration': 68.0, 'caloriesBurned': 8, 'activityName': 'Run', 'distance': 0, 'distanceUnit': 'Kilometer', 'activityLevel': [{'minutes': 0, 'name': 'sedentary'}, {'minutes': 0, 'name': 'lightly'}, {'minutes': 0, 'name': 'fairly'}, {'minutes': 0, 'name': 'very'}]}"]}]'''

# 解析外层JSON取第一条记录
data = json.loads(raw_response)[0]

param_items = []
cal_valid = True
total_cal = 0
# 逐个解析parameters里的字典字符串
for p_str in data["parameters"]:
    p = ast.literal_eval(p_str)
    param_items.append(p)
    if "caloriesBurned" in p:
        total_cal += p["caloriesBurned"]
    else:
        cal_valid = False

# 重组parameters结构
new_params = {}
for i, item in enumerate(param_items, 1):
    new_params[f"param{i}"] = item
# 总时长:分钟转毫秒,和示例的240000对齐
new_params["totalduration"] = int(data["duration_minutes"] * 60 * 1000)
# 卡路里字段按条件生成
if cal_valid:
    new_params["totalcaloriesburned"] = total_cal

data["parameters"] = new_params

# 直接输出就是你要的字典结构,需要JSON字符串可以用json.dumps(data)
print(data)

注:你给出的期望格式示例里,param1的activityLevel漏了开头的列表方括号,属于书写笔误,上述代码会保留接口返回的原始列表结构,不会修改原有合法数据。

运行上述代码处理你给出的示例输入,会得到符合要求的输出:

  • parameters从字符串列表转为带序号键的字典结构
  • 总卡路里自动求和,示例中两个活动分别为15、8,合计23
  • 总时长计算结果为240000,和示例一致
  • 只要任意一个参数缺失caloriesBurned键,最终结果就不会生成totalcaloriesburned字段,匹配你的补充需求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 22:51:20