потерянная граница таблицы в стиле фрейма данных pandas

#python #pandas #dataframe #pandas-styles

#python #pandas #фрейм данных #pandas-стили

Вопрос:

Я следую инструкциям в https://pandas.pydata.org/pandas-docs/stable/user_guide/style.html чтобы настроить стиль для моего фрейма данных, чтобы он стал html.

Это сработало хорошо, за исключением того, что граница таблицы каждой строки / столбца потеряна. Теперь это таблица без полей.

Как я могу добавить границы?

Ответ №1:

Я обычно не использую стиль pandas, поэтому я посмотрел его. Следующий код поможет вам. Похоже, у нас есть приоритет стилей. Тот, который вы задаете позже, имеет приоритет. Кажется, что вы можете указать селектор сразу, но вам нужно указать каждый из них.

 import numpy as np
import pandas as pd
from IPython.display import display, HTML

df = pd.DataFrame([[1, 2], [3, 4]], index=["a", "b"], columns=["A", "B"])

style = df.style.set_table_styles(
    [{"selector": "", "props": [("border", "1px solid grey")]},
      {"selector": "tbody td", "props": [("border", "1px solid grey")]},
     {"selector": "th", "props": [("border", "1px solid grey")]}
    ]
)


HTML(style.render())
  

введите описание изображения здесь

Ответ №2:

Ответ, зависящий от конкретного кода

В редакторе записной книжки Visual Studio code принятый ответ не работает, потому что стиль таблицы записной книжки имеет !important в существующем CSS. (Возможно, это вызвано темой dracula, которую я использую, или самим vs code?)

Чтобы заставить его работать, мне пришлось изменить ответ @r-beginners следующим образом:

 import numpy as np
import pandas as pd

df = pd.DataFrame([[1, 2], [3, 4]], index=["a", "b"], columns=["A", "B"])

df.style.set_table_styles(
    [
      {"selector": "td, th", "props": [("border", "1px solid grey !important")]},
    ]
)
  

скриншот вывода фрейма данных

Примечания:

  • Я добавил !important маркер в css
  • Я изменил селектор, чтобы просто "td, th" стилизовать ячейки данных и заголовка одной строкой.
  • Я явно не отображаю результат; фрейм данных будет отображаться, потому что это значение последнего выражения в ячейке