Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将数据帧转换为对象列表_Python_Pandas_Dataframe - Fatal编程技术网

Python 将数据帧转换为对象列表

Python 将数据帧转换为对象列表,python,pandas,dataframe,Python,Pandas,Dataframe,我想将数据帧转换为对象列表 这是我的班级: class Reading: def __init__(self): self.HourOfDay: int = 0 self.Percentage: float = 0 我读了一遍,所以我试了一下 df.to_dict(into=Reading) 但是它回来了 TypeError: unsupported type 我不想要一个元组列表,或者一个dict列表,而是一个读数列表。到目前为止,我发现的每个问

我想将数据帧转换为对象列表

这是我的班级:

class Reading:

    def __init__(self):
        self.HourOfDay: int = 0
        self.Percentage: float = 0
我读了一遍,所以我试了一下

df.to_dict(into=Reading)
但是它回来了

TypeError: unsupported type
我不想要一个元组列表,或者一个dict列表,而是一个读数列表。到目前为止,我发现的每个问题似乎都与这两种情况有关。但是我想要我自己的类型化对象


感谢

选项1:使
读取
集合继承。可变映射
并实现该基类的。好像有很多工作要做

选项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,则必须将其传递给initialized


使用带有两列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() ]  

最好使用参数初始化该类,如下所示:

 class Reading:
   def __init__(self, h, p):
       self.HourOfDay = h 
       self.Percentage = p 
然后,要创建读取列表,可以使用此函数,该函数将DataFrame作为参数:

 def reading_list(df:pd.DataFrame)->list:
    return list(map(lambda x:Reading(h=x[0],p=x[1]),df.values.tolist()))

执行速度很快,即使数据集很大。

您的答案完全符合我的需要!!!非常感谢你!!只是解释一下:我正在尝试将一些数据帧转换为类似“对象”的格式,以便使用库将它们用作OpenOffice模板的“数据”。。。。。顺便问一下,有没有一种方法可以自动化类“列”的初始化??