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

如何用Pandas将DataFrame中嵌套字典列表拆分为列与值

解决Pandas拆分字典列表列的问题

嘿,这事儿我熟!我来给你一步步拆解怎么把ExtData列里的字典列表拆成你要的格式。

首先,先把你的示例数据还原成可运行的代码,方便你直接测试:

import pandas as pd

# 构造你给出的原DataFrame
data = {
    "partner": ["xyz", "abc"],
    "ExtData": [
        [{"key":"title","value":"activation"},{"key":"remarks","value":"activation"}],
        [{"key":"title","value":"activation"},{"key":"remarks","value":"activation"}]
    ]
}
df = pd.DataFrame(data)

方法一:直观易懂的apply+Series方法

这个方法逻辑简单,适合小数据集:

  1. 先把每个ExtData里的字典列表转换成普通字典(用字典的key当列名,value当对应值)
  2. 把这个字典转成pd.Series,Pandas会自动把字典的key映射成列名
  3. 最后把原DataFrame的partner列和新生成的列合并起来

代码如下:

# 处理ExtData列,生成包含title、remarks的临时DataFrame
ext_processed = df["ExtData"].apply(lambda x: {item["key"]: item["value"] for item in x}).apply(pd.Series)

# 合并得到最终结果
final_df = pd.concat([df["partner"], ext_processed], axis=1)

# 打印结果
print(final_df)

运行后就能得到你想要的输出:

partner       title    remarks
0     xyz  activation  activation
1     abc  activation  activation

方法二:更高效的json_normalize方法

如果你的数据集很大,上面的apply逐行处理效率会偏低,试试用pd.json_normalize结合explode和pivot的组合,速度会快很多:

# 先把ExtData里的列表展开成单行一个字典
exploded_df = df.explode("ExtData")

# 用json_normalize把字典拆成key和value列
normalized_df = pd.json_normalize(exploded_df["ExtData"])

# 按原行号分组,把key转成列,value转成对应单元格的值
pivoted_df = normalized_df.pivot(index=exploded_df.index, columns="key", values="value").reset_index(drop=True)

# 合并partner列得到最终结果
final_df = pd.concat([df["partner"], pivoted_df], axis=1)

这个方法避免了逐行循环,处理大数据集的时候优势会很明显。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:17:46