создать несколько фреймов данных в l oop и писать в Excel - PullRequest
0 голосов
/ 09 февраля 2020

Я запускаю al oop над функцией, которая создает фрейм данных, который выглядит следующим образом:

        Prd1    Prd2     Prd3    Prd4    Prd5    Prd6
Loc1    0        0        0        0       0       0
Loc2    0        0        0        0       0       0
Loc3    0      30.61      0        0   319.58   430.87  
Loc4    0        0        0        0       0    120.73
Loc5    0        0        0        0       0       0
Loc6    78.21  822.36     0        0       0       0

Я хочу запустить функцию несколько раз, чтобы создать серию фреймов данных для последующего анализа или визуализировать эволюцию с течением времени. Для этого было бы идеально иметь их всех в одной книге Excel. Однако я борюсь с этим. Я пробовал

for case in CASES:
    B= A[case]
    result = function(B)
    print(result)
    with pd.ExcelWriter('results.xlsx') as writer:  # doctest: +SKIP
        result.to_excel(writer, sheet_name='case_'+str(case))

Я надеялся, что это приведет к записи разных результатов в одну таблицу. Однако в результате электронная таблица содержит только вкладку с последним регистром. Я могу видеть, как вышеприведенное существо в СЛУЧАЯХ l oop каждый раз перезаписывает существующий лист. Есть ли функция для сохранения уже существующих листов и «добавления» любого нового листа в существующую книгу? Заранее спасибо. С уважением П.

1 Ответ

1 голос
/ 09 февраля 2020

В соответствии с этой SO нитью вы можете получить список имен листов перед запуском l oop, проверить наличие существующих листов и пропустить их.

xl = pd.ExcelFile('results.xlsx')
existing_sheets = xl.sheet_names

for case in CASES:
    if f'cast_{str(case)}' in existing_sheets:
        continue
    B= A[case]
    result = function(B)
    print(result)
    with pd.ExcelWriter('results.xlsx') as writer:  # doctest: +SKIP
        result.to_excel(writer, sheet_name=f'case_{str(case)}')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...