如何将模型对象列表转换为pandas数据帧?

2024-10-05 11:27:40 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个这个类的对象数组

class CancerDataEntity(Model):

    age = columns.Text(primary_key=True)
    gender = columns.Text(primary_key=True)
    cancer = columns.Text(primary_key=True)
    deaths = columns.Integer()
    ...

打印时,数组如下所示

[CancerDataEntity(age=u'80-85+', gender=u'Female', cancer=u'All cancers (C00-97,B21)', deaths=15306), CancerDataEntity(...

我想把它转换成一个数据帧,这样我就可以用一种更适合我的方式来处理它——聚合、计数、求和等等。 我希望这个数据框看起来像这样:

     age     gender     cancer     deaths
0    80-85+  Female     ...        15306
1    ...

有没有一种方法可以使用numpy/pandas轻松实现这一点,而无需手动处理输入数组?


Tags: columns数据对象keytexttrueage数组
3条回答

导致所需结果的代码:

variables = arr[0].keys()
df = pd.DataFrame([[getattr(i,j) for j in variables] for i in arr], columns = variables)

感谢@Serbitar为我指明了正确的方向。

尝试:

variables = list(array[0].keys())
dataframe = pandas.DataFrame([[getattr(i,j) for j in variables] for i in array], columns = variables)

一个更简洁的方法是在类上定义一个to_dict方法,然后使用pandas.DataFrame.from_records

class Signal(object):
    def __init__(self, x, y):
        self.x = x
        self.y = y

    def to_dict(self):
        return {
            'x': self.x,
            'y': self.y,
        }

例如

In [87]: signals = [Signal(3, 9), Signal(4, 16)]

In [88]: pandas.DataFrame.from_records([s.to_dict() for s in signals])
Out[88]:
   x   y
0  3   9
1  4  16

相关问题 更多 >

    热门问题