Convert a Pandas DataFrame into a list of objects
Option 1: make Reading
inherit from collections.MutableMapping
and implement the necessary methods of that base class. Seems like a lot of work.
Option 2: Call Reading()
in a list comprehension:
>>> 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)]
From docs:
into
: The collections.Mapping subclass used for all Mappings in the return value. Can be the actual class or an empty instance of the mapping type you want. If you want a collections.defaultdict, you must pass it initialized.
having data frame with two column HourOfDay and Percentage, and parameterized constructor of your class you could define a list of Object like this:
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() ]