Как правильно экспортировать кадр данных Pandas в многолистовой файл Excel? - PullRequest
0 голосов
/ 08 февраля 2019

Мне нужно вывести два очищенных и пересчитанных кадра данных в файл Excel в виде отдельных листов.Этот код работает, но открытие результирующего файла в Excel приводит к «поврежденному файлу» - он восстанавливается и впоследствии открывается нормально, но это раздражает.

Код находится на ноутбуке Azure Jupiter, Python 3.6, я загружаю файл Excelи откройте в Excel 365, Win 10.

# Create a Pandas Excel writer using XlsxWriter as the engine.
writer = pd.ExcelWriter('PR_weatherGDDid.xlsx', engine='xlsxwriter') 

# Write each dataframe to a different worksheet.
df.to_excel(writer, sheet_name='Daily', index=False)     
doystats.to_excel(writer, sheet_name='stats')    

# Close the Pandas Excel writer and output the Excel file.
writer.save()

Итак: файл Excel создается, но есть проблема с открытием в Excel.

Ответы [ 4 ]

0 голосов
/ 11 февраля 2019

Как отметила Лариса Головко, эта проблема возникает только с XlsxWriter на ноутбуках Azure.Этого не происходит с XlsxWriter, Pandas или Jupyter в автономных средах.

Я копался в нем немного больше здесь и похоже, что в .rels есть ошибка сжатия zipfileфайлы в архиве xlsx.В настоящее время я не знаю, что является причиной этого, но, похоже, это связано со стандартной библиотекой Python zipfile в этой среде.Я попытаюсь собрать более простой тестовый пример без XlsxWriter.

Обходной путь - использовать опцию конструктора XlsxWriter in_memory:

workbook = xlsxwriter.Workbook('hello_world.xlsx', {'in_memory': True})

# Or:

writer = pd.ExcelWriter('pandas_example.xlsx',
                        engine='xlsxwriter',
                        options={'in_memory': True})
0 голосов
/ 09 февраля 2019

Это мой код, и я могу открыть файл Excell в порядке:

# Create a Pandas Excel writer using XlsxWriter as the engine.
writer = pd.ExcelWriter('PR_weatherGDDid.xlsx') 

data = [['AMN987','Ok'],['AMN987','Ok'],['AMN987','Error'], ['BBB987','Ok'],['BBB987','Ok'],['CCC','Error']]
df = pd.DataFrame(data, columns=['Serial', 'Status'])

days_to = [['02/08/19',4],['02/08/19',8],['02/08/19',3], ['02/08/19',6],['02/08/19',0],['02/08/19',9]]
doystats = pd.DataFrame(days_to, columns=['Date', 'Day'])

# Write each dataframe to a different worksheet.
df.to_excel(writer, sheet_name='Daily', index=False)     
doystats.to_excel(writer, sheet_name='stats')    

# Close the Pandas Excel writer and output the Excel file.
writer.save()
writer.close()

Вывод выглядит так:

enter image description here enter image description here

0 голосов
/ 11 февраля 2019

Проблема с тем, что Excel открывает только созданный файл после «ремонта», по-видимому, связана с тем, что файл был создан в записной книжке Azure Jupiter онлайн.Все 3 варианта кода (мой и предложенный @atlas и @sharif) создавали файл, нуждающийся в «исправлении» в онлайн-среде, но создавали обычный файл Excel, когда я запускал его через локально установленные ноутбуки Jupiter (Anaconda).

0 голосов
/ 08 февраля 2019

Вот правильный путь.

>>> with pd.ExcelWriter('PR_weatherGDDid.xlsx') as writer: 
...     df.to_excel(writer, sheet_name='Daily')
...     doystats.to_excel(writer, sheet_name='stats')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...