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

如何在Pandas中展开DataFrame内字典并关联原有列?

解决Pandas嵌套字典列表拆分后保留原列的简洁方法

直接上干货,用explode+json_normalize+concat的组合就能搞定,不用循环,代码简洁还高效:

步骤拆解(附示例)

假设你的原始DataFrame长这样:

import pandas as pd

df = pd.DataFrame({
    'cityId': ['C001', 'C002'],
    'regionId': ['R001', 'R002'],
    'data': [
        [{'code': 'A', 'date': '2023-01-01', 'value': 10}, {'code': 'B', 'date': '2023-01-02', 'value': 20}],
        [{'code': 'C', 'date': '2023-01-03', 'value': 30}]
    ]
})
  1. 拆分data列的列表:用explode把每个字典拆成单独一行,此时cityId和regionId会自动对应到每一行:
df_exploded = df.explode('data').reset_index(drop=True)
  1. 解析字典列:用json_normalize把data列的字典转成结构化的列:
df_parsed = pd.json_normalize(df_exploded['data'])
  1. 拼接原列和解析后的列:因为两者索引完全对齐,直接用pd.concat横向拼接就行:
final_df = pd.concat([df_exploded[['cityId', 'regionId']], df_parsed], axis=1)

为啥之前join/merge会重复?

大概率是你没处理索引,或者merge时没指定唯一键导致匹配混乱。而concat依赖索引对齐,只要df_exploded和df_parsed的索引一致,就不会出现重复列或匹配错误的问题。

更简洁的写法(一行搞定)

如果想省行数,可以把步骤合并:

final_df = df.explode('data').pipe(lambda x: pd.concat([x[['cityId', 'regionId']], pd.json_normalize(x['data'])], axis=1))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 20:52:34