如何将包含dict值的DataFrame多行合并为单行
实现方案
你遇到的报错是因为pandas默认的行合并方法不支持dict类型的运算,通过自定义聚合逻辑即可完成dict值的拼接整合,以下是两种常用场景的实现代码:
场景1:保留原列结构,同列所有dict合并为单个dict
import pandas as pd # 你的原始DataFrame命名为df,下同 # 无重复键时直接合并,重复键默认后出现的覆盖先出现的 merged_row = df.agg(lambda col: {k: v for item in col for k, v in item.items()}) # 转为单行DataFrame result = pd.DataFrame([merged_row.to_dict()])
如果需要保留重复键的所有值,修改聚合逻辑即可:
from collections import defaultdict def merge_dicts(dict_list): res = defaultdict(list) for d in dict_list: for k, v in d.items(): res[k].append(v) return dict(res) merged_row = df.agg(merge_dicts) result = pd.DataFrame([merged_row.to_dict()])
场景2:所有dict的键值对全部展开为单行的独立列
total_dict = {} for _, row in df.iterrows(): for col_val in row: total_dict.update(col_val) result = pd.DataFrame([total_dict])
前置检查建议
- 合并前可先执行
df = df.fillna({})将空值替换为空dict,避免空值引发报错 - 存在重复键需求可自行调整拼接逻辑,比如将重复值拼接为字符串、存储为列表等
内容的提问来源于stack exchange,提问作者Tomy Hrdnsyh
相关产品推荐
相关产品推荐

