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

如何将含dataclass对象的pd.Series展开为字段为列的pd.DataFrame?

将包含dataclass对象的Pandas Series转换为结构化DataFrame

给定如下代码,生成的Series foo_bar 输出可读性差,直接调用 pd.DataFrame(foo_bar) 无法得到按 foo、bar 字段拆分的结构化结果:

import dataclasses
import pandas as pd

@dataclasses.dataclass(frozen=True)
class FooBar:
    foo: int
    bar: str

foo_bar = pd.Series([FooBar(1, 'a'), FooBar(2, 'b')], index=[100, 200])

原Series输出:

100    FooBar(foo=1, bar='a')
200    FooBar(foo=2, bar='b')
dtype: object

想要得到如下结构化DataFrame:

foo bar
0    1   a
1    2   b

可以用以下几种方法实现:

方法1:借助dataclasses.asdict转换为字典列表

将每个dataclass对象转为字典,再传入pd.DataFrame构造:

df = pd.DataFrame([dataclasses.asdict(item) for item in foo_bar])

方法2:使用pd.json_normalize自动展开属性

json_normalize可以直接识别对象的属性并展开为列,如需重置索引可追加reset_index(drop=True):

df = pd.json_normalize(foo_bar).reset_index(drop=True)

方法3:通过apply手动提取字段

针对字段较少的场景,可手动指定提取每个属性:

df = foo_bar.apply(lambda x: pd.Series({'foo': x.foo, 'bar': x.bar})).reset_index(drop=True)

以上三种方法都能得到目标格式的DataFrame,其中pd.json_normalize是最简洁的方案。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 11:15:08