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

如何解析Python DataFrame中字典列表类型的列并重构表格

解决方案:展开DataFrame嵌套字典列表并合并到原表

问题场景

现有如下结构的DataFrame:

idnamedescribe
1some[{'id':20, 'name':'thisIwantAsNameColumn','value':'thisIwantasValueinRow'},{'id':22, 'name':'thisIwantAsNameColumn2','value':'thisIwantasValueinRow2'}]
2some2[{'id':23, 'name':'thisIwantAsNameColumn','value':'thisIwantasValueinRow'},{'id':24, 'name':'thisIwantAsNameColumn2','value':'thisIwantasValueinRow2'}]

需要将其重构为:

idnamethisIwantAsNameColumnthisIwantAsNameColumn2
1somethisIwantasValueinRowthisIwantasValueinRow2
2some2thisIwantasValueinRowthisIwantasValueinRow2

原函数每次生成独立小DataFrame,导致后续合并困难,以下是两种高效解决方案:


方法一:apply+Series直接生成列并合并

直接将describe列的每个字典列表转换为Series,通过join快速合并到原表,自动对齐索引:

import pandas as pd

# 构造示例数据
data = {
    'id': [1, 2],
    'name': ['some', 'some2'],
    'describe': [
        [{'id':20, 'name':'thisIwantAsNameColumn','value':'thisIwantasValueinRow'},
         {'id':22, 'name':'thisIwantAsNameColumn2','value':'thisIwantasValueinRow2'}],
        [{'id':23, 'name':'thisIwantAsNameColumn','value':'thisIwantasValueinRow'},
         {'id':24, 'name':'thisIwantAsNameColumn2','value':'thisIwantasValueinRow2'}]
    ]
}
df = pd.DataFrame(data)

# 处理函数:将字典列表转为{字段名: 字段值}的Series
def parse_describe(row):
    return pd.Series({item['name']: item['value'] for item in row})

# 生成扩展列并合并,删除原describe列
result_df = df.join(df['describe'].apply(parse_describe)).drop('describe', axis=1)
print(result_df)

方法二:explode+pivot(适配复杂场景)

如果数据量较大或嵌套结构存在差异,可通过拆分行再转列的方式处理,保留原表关联键确保合并准确:

import pandas as pd

# 构造示例数据(同方法一)
data = {
    'id': [1, 2],
    'name': ['some', 'some2'],
    'describe': [
        [{'id':20, 'name':'thisIwantAsNameColumn','value':'thisIwantasValueinRow'},
         {'id':22, 'name':'thisIwantAsNameColumn2','value':'thisIwantasValueinRow2'}],
        [{'id':23, 'name':'thisIwantAsNameColumn','value':'thisIwantasValueinRow'},
         {'id':24, 'name':'thisIwantAsNameColumn2','value':'thisIwantasValueinRow2'}]
    ]
}
df = pd.DataFrame(data)

# 拆分describe列表为单行,展开字典为列
temp_df = df[['id', 'name']].join(df['describe'].explode().apply(pd.Series))
# 按原表主键转列,恢复结构
result_df = temp_df.pivot(index=['id', 'name'], columns='name', values='value').reset_index()
# 清理列名层级
result_df.columns = result_df.columns.get_level_values(0)

print(result_df)

原函数问题说明

原函数每次返回独立的小DataFrame,后续合并需手动处理索引对齐,而上述两种方法要么通过join自动对齐,要么保留原表主键确保结构匹配,避免了合并难题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 04:01:56