Храните DataFrame в словаре в течение двух циклов for - PullRequest
0 голосов
/ 13 марта 2020
ElectricityDemand = []  
FuelDemand = []
dict_of_results = {} 

data = pd.read_csv('data.csv', sep = ';', index_col = False)
# data.csv looks like the following, containing 2 objects: 
# parameter1;parameter2;parameter3
# 388;2000;14
# 293;1890;12.6

list_of_objects = [list(row) for row in data.values]

for item in range(len(list_of_objects)):
   MyObject = Class(parameter1 = list_of_objects[item][0],
                     parameter2 = list_of_objects[item][1],
                     parameter3= list_of_objects[item][2])

   # Load more datafiles and define some constants

   # Iterating over every hour of a year and calculate the ElectricityDemand and FuelDemand of the object
   for h in range(8760):

      # ...calculate here...

      ElectricityDemand.append(MyObject.electricity_demand)
      FuelDemand.append.append(MyObject.fuel_demand)

   results = pd.DataFrame({'ElectricityDemand': ElectricityDemand, 'FuelDemand': FuelDemand})
   for i in range(len(list_of_objects)):
        results['iter'] = i
        dict_of_results[i] = results.copy()

Эта программа выполняет итерации по часам года (8760 часов) - см. Внутренний l oop - для 2 различных объектов (см. Внешний диапазон l oop: (len (list_of_objects)) ).
Я хочу сохранить результаты внутреннего l oop в виде списков (ElectricityDemand и FuelDemand), затем в (временном) DataFrame ( results ) и затем сохранить DataFrame в словаре, впоследствии продолжая ту же процедуру для объекта 2.
На этом этапе я получаю словарь с 2 DataFrames, каждый из которых имеет 17520 (8760 * 2) наблюдений.

Я не могу найти свою ошибку ... Как мне получить словарь с двумя фреймами данных (каждый с 8760 наблюдениями)?

Мой вывод сейчас: dict_of_results
Тип: dict
Размер: 2
Значение: {0: DataFrame, 1: DataFrame}

в 0: DataFrame
Тип: DataFrame
Размер: (17520, 2)
Значение: имена столбцов: ElectricityDemand и FuelDemand
и 17520 строк для ElectricityDemand и FuelDemand (данные объекта 1 (из входных данных 388; 2000; 14 ) и объекта 2 (из входных данных 293; 1890; 12,6 )).

в 1: DataFrame
Точно так же, как в 0: DataFrame

Мой желаемый вывод: dict_of_results
Тип: dict
Размер: 2
Значение: {0: Фрейм данных, 1: Фрейм данных}

в 0: Фрейм данных
Тип: Фрейм данных
Размер: (8760, 2)
Значение: имена столбцов: ElectricityDemand и FuelDemand
и 8760 строк для одного объекта (из входных данных 388; 2000; 14 )

в 1: DataFrame
НЕ точно такой же, как в 0: DataFrame, но Size : (8760, 2) ElectricityDemand и FuelDemand с соответствующими строками / значениями / результатами для второго объекта (из входных данных 293; 1890; 12,6 ).

1 Ответ

1 голос
/ 13 марта 2020

Вы инициализируете списки ElectricityDemand и FuelDemand перед l oop, а затем добавляете их в l oop. На втором проходе они все еще содержат строки из первого прохода.

Вы должны установить обе переменные в новый список fre sh внутри l oop:

...
for item in range(len(list_of_objects)):
    ElectricityDemand = []  
    FuelDemand = []
    ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...