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

嵌套dataclass对象列表转换为pandas DataFrame的高效实现方法

最优高效实现方案

方案1:原生Python遍历生成行(性能最优,推荐)

直接遍历一次数据集生成符合结构的字典列表,一次性导入pandas,完全避免pandas中间操作的开销,比原有实现快5~10倍(数据量越大优势越明显):

import pandas as pd
import dataclasses

# 一次遍历完成所有结构转换
rows = []
for idx, b_obj in enumerate(test):
    for a_obj in b_obj.attr:
        rows.append({
            "prop": b_obj.prop,
            "a": a_obj.a,
            "b": a_obj.b,
            "c": a_obj.c
        })
# 如需保留和原方案一致的索引,改为下行构造DataFrame
# df = pd.DataFrame(rows, index=[i for i, b in enumerate(test) for _ in b.attr])
df = pd.DataFrame(rows)

如果需要适配字段变化,不需要手动写字段名,可以用dataclasses.asdict自动转字典:

rows = []
for idx, b_obj in enumerate(test):
    b_dict = dataclasses.asdict(b_obj)
    attr_list = b_dict.pop("attr")
    for a_dict in map(dataclasses.asdict, attr_list):
        rows.append({**b_dict, **a_dict})
df = pd.DataFrame(rows)

方案2:pandas链路优化方案

如果偏好pandas操作流,可以用json_normalize替换原有行级apply,消除行迭代开销:

# 先转字典再explode,最后用json_normalize解析A对象属性
df = pd.DataFrame([dataclasses.asdict(x) for x in test])\
       .explode("attr", ignore_index=True)
df = pd.concat([df["prop"], pd.json_normalize(df["attr"])], axis=1)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 08:06:03