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

如何将含多键值对的字典转换为指定结构的DataFrame

问题描述

我用以下代码清洗数据:

empty = {}
mess = lophoc_clean.query("lop_diemquatrinh.notnull()")[['lop_id', 'lop_diemquatrinh']]
keys = []
values = []
for index, rows  in mess.iterrows():
    if len(rows['lop_diemquatrinh']) >4:
        values.append(rows['lop_diemquatrinh'])
        keys.append(rows['lop_id'])
df = pd.DataFrame(dict(zip(keys, values)), index = [0]).transpose()
df.columns = ['data']

得到的字典结构结果如下:

{'data': {37: '[{"date_update":"31-03-2022","diemquatrinh":"6.0"}]',
  38: '[{"date_update":"11-03-2022","diemquatrinh":"6.25"}]',
  44: '[{"date_update":"25-12-2021","diemquatrinh":"6.0"},{"date_update":"28-04-2022","diemquatrinh":"6.25"},{"date_update":"28-07-2022","diemquatrinh":"6.5"}]',
  1095: '[{"date_update":null,"diemquatrinh":null}]'}}

现在需要将其转换为包含id、updated_at、diemquatrinh三列的DataFrame,目标结构如下:

idupdated_atdiemquatrinh
3811-03-20226.25
4425-12-20216.0
4428-04-20226.25
4428-07-20226.5
1095nullnull
解决方案

通过解析JSON字符串+展开嵌套数据的方式实现,具体代码如下:

import pandas as pd
import json

# 解析data列中的JSON字符串为字典列表
df['data'] = df['data'].apply(json.loads)

# 展开嵌套的列表数据,同时保留原索引作为id
result_df = df.explode('data').reset_index(names='id')

# 将字典列拆分为独立字段列
result_df = pd.concat([result_df[['id']], result_df['data'].apply(pd.Series)], axis=1)

# 重命名列名匹配目标结构
result_df = result_df.rename(columns={'date_update': 'updated_at'})

# 可选:将diemquatrinh转为数值类型,空值自动转为NaN
result_df['diemquatrinh'] = pd.to_numeric(result_df['diemquatrinh'], errors='coerce')

# 若需要将NaN显示为"null",可执行以下代码
# result_df = result_df.fillna('null')

print(result_df)

执行后即可得到符合要求的DataFrame,其中原数据的索引会作为id列,JSON中的字段会被拆分并对应到目标列。


内容的提问来源于stack exchange,提问作者Phạm Tấn Thành

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 11:25:17