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模板的“数据”。。。。。顺便问一下,有没有一种方法可以自动化类“列”的初始化??