用于存储对象的Python数据帧或列表

2024-04-24 10:28:44 发布

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

我能在pandas/numpy Series DataFrame/ndarray中“存储”类的实例吗 就像我在名单上一样?或者这些库支持内置类型(数字、字符串)。

例如,我有带x,y坐标的Point,我想将Points存储在Plane中,这将返回带给定坐标的Point

#my class
class MyPoint:

    def __init__(self, x,y):
        self.x = x
        self.y = y

    @property
    def x(self):
        return self.x

    @property
    def y(self):
        return self.y

我在这里创建实例:

first_point = MyClass(1,1)
second_point = MyClass(2,2)

我可以将实例存储在某个列表中

my_list = []
my_list.append(first_point)
my_list.append(second_point)

列表中的问题是它的索引与x,y属性不对应。

字典/数据帧方法:

Plane = {"x" : [first_point.x, second_point.x], "y" : [first_point.y, second_point.y], "some_reference/id_to_point_instance" = ???}
Plane_pd = pd.DataFrame(Plane)

我读过一些文章,在DataFrame中使用instance的“id”作为第三列值可能会导致垃圾收集器出现问题。


Tags: 实例selfdataframereturnmydefmyclassproperty
1条回答
网友
1楼 · 发布于 2024-04-24 10:28:44

一个^{}将很乐意地存储python对象。

一些测试代码来演示。。。

测试代码:

class MyPoint:
    def __init__(self, x, y):
        self._x = x
        self._y = y

    @property
    def x(self):
        return self._x

    @property
    def y(self):
        return self._y

my_list = [MyPoint(1, 1), MyPoint(2, 2)]
print(my_list)

plane_pd = pd.DataFrame([[p.x, p.y, p] for p in my_list],
                        columns=list('XYO'))
print(plane_pd.dtypes)
print(plane_pd)

结果:

[<__main__.MyPoint object at 0x033D2AF0>, <__main__.MyPoint object at 0x033D2B10>]

X     int64
Y     int64
O    object
dtype: object

   X  Y                                        O
0  1  1  <__main__.MyPoint object at 0x033D2AF0>
1  2  2  <__main__.MyPoint object at 0x033D2B10>

注:

注意,列表中的两个对象与数据帧中的两个对象相同。还要注意O列的dtype是object

相关问题 更多 >