Я хотел бы настроить многие фреймы данных в формате html (для включения в отчеты) и пытался добиться последовательного стиля определенных ячеек фрейма данных, включая форматы значений. В частности, я пытаюсь:
а) добавить последовательные стили в один и тот же фрейм данных; включая общие стили таблиц и, б) пользовательские форматы для определенных ячеек (например, цвета и т. д.), И включая, в) форматы для значения в определенных ячейках (например, '{:.2f}')
Используемые мной кадры данных содержат строковые данные в первых двух строках и в первом столбце. Я ожидаю, что это не слишком pythonic, но у меня есть требование к таблице вывода смешанных данных. Итак, я пошел дальше с этим подходом и интегрировал некоторые решения, которые я нашел полезными от других (Объединение объектов pandas data frame.style и вывод в html и Как определить цвет конкретной ячейки в кадре данных pandas на основе целочисленной позиции (например, df.iloc[1,1]) с помощью df. style?), обеспечивая основную часть описанного ниже подхода. Однако я не нашел ничего, что обеспечивало бы гибкость форматирования, которую я искал, включая форматы значений, т. е. c, выше).
Я использовал следующее для достижения а) и б) выше, что было успешным:
# Successive styles applied.
styled_df = (df.style
# Style the dataframe / table using CSS/html properties/names
.set_table_styles(
[{'selector': 'th',
'props': [('background', '#C8E8FA'),
('color', 'black'),
('border', '1px solid black'),
('font-family', 'calibri')]},
{'selector': 'td',
'props': [('border', '1px solid black'),
('font-family', 'calibri')]},
{'selector': 'tr:nth-of-type(odd)',
'props': [('background', '#f2f2f2')]},
{'selector': 'tr:nth-of-type(even)',
'props': [('background', 'white')]},
{'selector': 'table',
'props': [('border', '1px solid black')]},
])
# Add styling to specific cells in table, using style.apply and a defined function
.apply(style_data_cell, axis=None)
)
# Show styled df in Jupyter Notebook
styled_df
Где определенная функция:
def style_data_cell(x):
df1 = pd.DataFrame('', index=x.index, columns=x.columns)
# color cells based on iloc
color = 'background-color: lightgreen'
df1.iloc[3:,1:] = color
return df1
Чтобы выборочно отформатировать форматы значений определенных ячеек, я безуспешно пытался добавить эту строку (и варианты) к определенной функции, что не вызвало ошибки, но вообще не изменило стилизованный df:
df1.iloc[3:,1:].style.format('{:.2f}')
Есть ли способ использовать это в стилизаторе styled_df с другими форматами? Если нет, есть ли другой подход для достижения a, b и c выше?