如何将含多键值对的字典转换为指定结构的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,目标结构如下:
| id | updated_at | diemquatrinh |
|---|---|---|
| 38 | 11-03-2022 | 6.25 |
| 44 | 25-12-2021 | 6.0 |
| 44 | 28-04-2022 | 6.25 |
| 44 | 28-07-2022 | 6.5 |
| 1095 | null | null |
解决方案
通过解析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
相关产品推荐
相关产品推荐

