Конвертировать Pandas DataFrame в список объектов - PullRequest
0 голосов
/ 07 ноября 2018

Я хочу преобразовать DataFrame Pandas в список объектов.

Это мой класс:

class Reading:

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

Я прочитал .to_dict, поэтому я попытался

df.to_dict(into=Reading)

но он вернулся

TypeError: unsupported type

Мне не нужен список кортежей или список диктовок, но список Чтений. Кажется, что каждый вопрос, который я обнаружил, касается этих двух сценариев. Но я хочу, чтобы мои собственные печатные объекты.

Спасибо

Ответы [ 2 ]

0 голосов
/ 10 апреля 2019

имея фрейм данных с двумя столбцами 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() ]  
0 голосов
/ 07 ноября 2018

Вариант 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: Подкласс collection.Mapping, используемый для всех отображений в возвращаемом значении. Может быть реальным классом или пустым экземпляром нужного вам типа отображения. Если вам нужен файл collection.defaultdict, вы должны передать его инициализированным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...