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

如何自动展开Pandas DataFrame中含字典列表的列并生成新列

自动展开Pandas中存储字典列表的列

先还原你的示例数据:

import pandas as pd

data = {
    'col1': ['val1', 'val11'],
    'col2': ['val2', 'val22'],
    'combine_col1': [[{'x1':'v1','x2':'v2'}], [{'x1':'v11','x2':'v22'}]],
    'combine_col2': [[{'x3':'v3','x4':'v4','x5':'v5'}], [{'x3':'v33','x4':'v44','x5':'v55'}]]
}
df = pd.DataFrame(data)

以下是自动化展开的实现步骤:

  • 识别需要展开的列
    遍历所有列,判断列中存储的是否是字典列表(每个单元格为包含字典的列表):
def is_list_of_dicts(series):
    # 取第一个非空元素判断类型
    first_non_null = series.dropna().iloc[0] if not series.dropna().empty else None
    return isinstance(first_non_null, list) and len(first_non_null) > 0 and isinstance(first_non_null[0], dict)

# 筛选出需要展开的目标列
expand_cols = [col for col in df.columns if is_list_of_dicts(df[col])]
  • 逐个展开目标列
    对每个目标列,先提取列表中的字典(示例中每个列表仅含一个字典),再用pd.json_normalize将字典展开为新列:
expanded_dfs = []
for col in expand_cols:
    # 提取列表内的字典元素
    dict_series = df[col].str[0]
    # 展开字典为DataFrame
    expanded_df = pd.json_normalize(dict_series)
    expanded_dfs.append(expanded_df)
  • 合并最终结果
    保留原DataFrame中无需展开的列,再与所有展开后的列合并:
# 筛选无需展开的列
non_expand_cols = [col for col in df.columns if col not in expand_cols]
# 横向合并所有DataFrame
result = pd.concat([df[non_expand_cols]] + expanded_dfs, axis=1)

运行后result的列名即为col1、col2、x1、x2、x3、x4、x5,完全符合需求。如果后续遇到单元格包含多个字典的情况,可在提取字典前添加df[col].explode()拆分列表,再进行展开操作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 01:17:22