将 Pandas DataFrame 转换为对象列表

新手上路,请多包涵

我想将 Pandas DataFrame 转换为对象列表。

这是我的课:

 class Reading:

    def __init__(self):
        self.HourOfDay: int = 0
        self.Percentage: float = 0

我阅读了 .to_dict,所以我尝试了

df.to_dict(into=Reading)

但它回来了

TypeError: unsupported type

我不需要元组列表或字典列表,而是阅读列表。到目前为止我发现的每个问题似乎都与这两种情况有关。但我想要我自己的类型化对象。

谢谢

原文由 zola25 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.1k
2 个回答

具有包含两列 HourOfDay 和 Percentage 的数据框,以及类的参数化构造函数,您可以定义一个对象列表,如下所示:

  class Reading:

   def __init__(self, h, p):
       self.HourOfDay = h
       self.Percentage = p

 listOfReading= [(Reading(row.HourOfDay,row.Percentage)) for index, row in df.iterrows() ]

原文由 NargesooTv 发布,翻译遵循 CC BY-SA 4.0 许可协议

选项 1:使 Reading 继承自 collections.MutableMapping 并实现该基类的 必要方法。看起来工作量很大。

选项 2:在列表理解中调用 Reading()

 >>> import pandas as pd
>>>
>>> df = pd.DataFrame({
...     'HourOfDay': [5, 10],
...     'Percentage': [0.25, 0.40]
... })
>>>
>>> class Reading(object):
...     def __init__(self, HourOfDay: int = 0, Percentage: float = 0):
...         self.HourOfDay = int(HourOfDay)
...         self.Percentage = Percentage
...     def __repr__(self):
...         return f'{self.__class__.__name__}> (hour {self.HourOfDay}, pct. {self.Percentage})'
...
>>>
>>> readings = [Reading(**kwargs) for kwargs in df.to_dict(orient='records')]
>>>
>>>
>>> readings
[Reading> (hour 5, pct. 0.25), Reading> (hour 10, pct. 0.4)]

来自文档:

into : collections.Mapping 子类用于返回值中的所有映射。可以是您想要的映射类型的实际类或空实例。如果你想要一个 collections.defaultdict,你必须通过它初始化。

原文由 Brad Solomon 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题