Объединение панд "data frame.style" объектов и вывод в HTML - PullRequest
0 голосов
/ 07 февраля 2019

Я хотел бы объединить панды df.style объекты, которые используют следующие методы - df.style.background_gradient и df.style.bar и экспортировать результат в HTML.

Я успешен, когда у меня есть отдельные объекты.Вот пример фрейма данных:

df = pd.DataFrame(np.random.randn(15).reshape(5, 3))

Затем я могу передать это различным методам стиля:

# Use method "background_gradient"
styled_df_a = df.style.background_gradient(subset=[0, 1], 
                                       low=0, high=0.5, 
                                       cmap="YlGnBu")

# Use method "bar"
styled_df_b = df.style.bar(subset=[2], align='mid', 
                       color=['#d65f5f', '#5fba7d'])

Впоследствии я экспортирую каждую из стилизованных таблиц в html:

# Export styled table a to html
html = styled_df_a.render()
with open("df_a.html","w") as fp:
fp.write(html)

# Export styled table b to html
html = styled_df_b.render()
with open("df_b.html","w") as fp:
fp.write(html)  

Поэтому у меня есть 2 html-таблицы в стиле.Однако я хотел бы объединить эти 2 метода в таблицу в стиле html, чтобы столбцы 1-2 имели стиль background_gradient, а столбец 3 - стиль bar.

Я пробовал это:

styled_df_c = styled_df_a.style.bar(subset=[2], align='mid', 
                                color=['#d65f5f', '#5fba7d'])

Это не работает из-за следующей ошибки:

AttributeError: 'Styler' object has no attribute 'style'

Есть ли способ сделать это другими способами?Я попытался поэкспериментировать с методом style.apply панд, но получил ошибку, аналогичную описанной выше.

1 Ответ

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

Я нашел решение, основанное на информации здесь: mode.com / example-gallery / python_dataframe_styling

Вместо того, чтобы пытаться принудить стилизованный объект с помощью большего количества методов стилизации, вы можетепросто передайте несколько методов стиля в один и тот же фрейм данных одновременно.Пожалуйста, смотрите ниже:

# example data frame
df = pd.DataFrame(np.random.randn(15).reshape(5, 3))

# pass multiple style methods to same  data frame
styled_df = (df.style
             .background_gradient(subset=[0, 1], # background_gradient method
                                  low=0, high=0.5,
                                  cmap="YlGnBu")
             .bar(subset=[2], align='mid',       # bar method
                  color=['#d65f5f', '#5fba7d']))

# Export "styled_df" to html
html = styled_df.hide_index().render()
with open("html_c.html","w") as fp:
   fp.write(html)
...