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

如何高效拆分Pandas数据框中字典列表格式的列?

高效拆分Pandas中字典列表列的方案

你的原始代码用iterrows()逐行迭代+df.at赋值,效率低的核心原因是:iterrows()会将每行转为Series带来额外开销,且逐元素修改DataFrame会频繁触发内部数据结构更新,数据量越大越明显。下面是几种更高效的实现方式:

方法一:利用apply生成Series合并(简洁高效)

通过apply将每行的fields列表转换为以label为列名、value为值的Series,再和原DataFrame的formId列合并:

import pandas as pd

# 将fields列的字典列表转换为结构化Series
fields_df = df['fields'].apply(lambda x: pd.Series({item['label']: item['value'] for item in x}))
# 合并原formId列与转换后的字段列
result = pd.concat([df['formId'], fields_df], axis=1)

方法二:列表推导式生成结构化字典(超大数据量首选)

先通过itertuples()(比iterrows()更快)遍历每行,生成包含formId和所有字段键值对的字典列表,最后一次性创建DataFrame:

data = []
for row in df.itertuples():
    record = {'formId': row.formId}
    # 将fields中的字典转为键值对更新到record
    record.update({item['label']: item['value'] for item in row.fields})
    data.append(record)

result = pd.DataFrame(data)

方法三:向量化的explode+json_normalize(纯Pandas内部优化)

利用Pandas的向量化函数完成拆分、标准化、 pivot操作,完全避免Python层面的循环:

# 将fields列表拆分为每行一个字典
expanded_df = df.explode('fields')
# 标准化字典为列
normalized_df = pd.json_normalize(expanded_df['fields'])
# 关联原formId
normalized_df['formId'] = expanded_df['formId'].values
# 转换为宽表结构
result = normalized_df.pivot(
    index='formId',
    columns='label',
    values='value'
).reset_index()
# 移除列名的层级标签
result.columns.name = None

以上三种方法的效率均远高于你的原始代码,其中方法三适合绝大多数场景,方法二更适合超大规模数据集。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 05:25:57