如何用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方法
这个方法逻辑简单,适合小数据集:
- 先把每个
ExtData里的字典列表转换成普通字典(用字典的key当列名,value当对应值) - 把这个字典转成
pd.Series,Pandas会自动把字典的key映射成列名 - 最后把原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
相关产品推荐
相关产品推荐

