Объединение объектов pandas dataframe.syle, в том числе для определенных ячеек и форматов значений

Я хотел бы настроить многие фреймы данных в формате 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 выше?


person user15962471    schedule 12.06.2021    source источник