gpt4 book ai didi

python - 对象到 Pandas 数据框

转载 作者:行者123 更新时间:2023-12-05 01:56:22 25 4
gpt4 key购买 nike

我有一个对象列表,如下面的测试变量所示:

@dataclasses.dataclass
class A:
a: float
b: float
c: float

@dataclasses.dataclass
class B:
prop: str
attr: List["A"]

test = [
B("z", [A('a', 'b', 'c'), A('d', 'l', 's')]),
B("a", [A('s', 'v', 'c')]),
]

我希望它像这样将它转换成 pandas df:

   prop a   b   c
0 z a b c
0 z d l s
1 a s v c

我可以分几个步骤完成,但它似乎没有必要且效率低下,因为我要多次处理相同的数据:

a = pd.DataFrame(
[obj.__dict__ for obj in test]
)
a
prop attr
0 z [A(a='a', b='b', c='c'), A(a='d', b='l', c='s')]
1 a [A(a='s', b='v', c='c')]

b = a.explode('attr')
b
prop attr
0 z A(a='a', b='b', c='c')
0 z A(a='d', b='l', c='s')
1 a A(a='s', b='v', c='c')

b[["a", "b", "c"]] = b.apply(lambda x: [x.attr.a, x.attr.b, x.attr.c], axis=1, result_type="expand")
b

prop attr a b c
0 z A(a='a', b='b', c='c') a b c
0 z A(a='d', b='l', c='s') d l s
1 a A(a='s', b='v', c='c') s v c

能不能做得更高效一点?

最佳答案

结合使用 dataclasses.asdictpd.json_normalize

In [59]: pd.json_normalize([dataclasses.asdict(k) for k in test], 'attr', ['prop'])
Out[59]:
a b c prop
0 a b c z
1 d l s z
2 s v c a

关于python - 对象到 Pandas 数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69876024/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com