Почему метод pandas Styler 'to_excel' не сохраняет процентное форматирование? - PullRequest
0 голосов
/ 27 мая 2020

Я использую класс pandas Styler для форматирования некоторых столбцов в процентах. Когда я пишу вывод в Excel, столбцы по-прежнему отображаются как плавающие. Почему я могу правильно форматировать и сохранять цвета, но не проценты?

import pandas as pd
import numpy as np

def color_negative_red(val):
    color = 'red' if val < 0 else 'black'
    return 'color: %s' % color

np.random.seed(24)
df = pd.DataFrame({'A': np.linspace(1, 10, 10)})
df = pd.concat([df, pd.DataFrame(np.random.randn(10, 4), columns=list('BCDE'))],axis=1)

Это дает следующее:

df.style.format('{:.2%}').applymap(color_negative_red)

formatted dataframe

Но при сохранении в Excel проценты снова возвращаются к числам с плавающей запятой:

df.style.format('{:.2%}').applymap(color_negative_red).to_excel('format_test.xlsx')

Excel Output

Что делать?

Ответы [ 2 ]

0 голосов
/ 28 мая 2020

Предлагаемое решение для процентного форматирования:

with pd.ExcelWriter('test_format.xlsx') as writer:
    df.to_excel(writer, sheet_name='Sheet1', index=False)
    percent_format = writer.book.add_format({'num_format': '0.00%'})
    worksheet = writer.book.worksheets_objs[0]
    for col in ['A','C','E']:
        worksheet.set_column(f'{col}:{col}', None, percent_format)

действительно добавляет проценты к столбцам A, C и E.

worksheet with percent formatting

Однако он работает только для объекта DataFrame и не может использоваться со стилером, что означает, что все остальное форматирование должно выполняться с помощью объекта записи:

with pd.ExcelWriter('test_format.xlsx') as writer:
    df.style.applymap(color_negative_red).to_excel(writer, sheet_name='Sheet1', index=False)
    percent_format = writer.book.add_format({'num_format': '0.00%'})
    worksheet = writer.book.worksheets_objs[0]
    for col in ['A','C','E']:
        worksheet.set_column(f'{col}:{col}', None, percent_format)

enter image description here

0 голосов
/ 27 мая 2020

Возможно, вы захотите взглянуть на openpyxl, например, через эту ветку Запись процентов в Excel с помощью Pandas

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