Подтвердить что ты не робот

Pandas Dataframes to_html: выделение строк таблицы

Я создаю таблицы, используя функцию pandas to_html, и я хотел бы выделить нижнюю строку выведенной таблицы, которая имеет переменную длину. У меня нет реального опыта использования html, и все, что я нашел в Интернете, это         

<table border="1">
  <tr style="background-color:#FF0000">
    <th>Month</th>
    <th>Savings</th>
  </tr>
  <tr>
    <td>January</td>
    <td>$100</td>
  </tr>
</table>

Итак, я знаю, что последняя строка должна иметь <tr style=""background-color:#FF0000"> (или какой-либо цвет, который я хочу), а не только <tr>, но то, что я действительно не знаю, как это сделать, это заставить это произойти с таблицами я ' м. Я не думаю, что могу сделать это с помощью самой функции to_html, но как это сделать после создания таблицы?

Любая помощь приветствуется.

4b9b3361

Ответ 1

Вы можете сделать это в javascript, используя jQuery:

 $('table tbody tr').filter(':last').css('background-color', '#FF0000')

Также более новые версии pandas добавляют класс dataframe к таблице html, поэтому вы можете отфильтровать только таблицы pandas, используя:

 $('table.dataframe tbody tr').filter(':last').css('background-color', '#FF0000')

Но вы можете добавить свои собственные классы, если хотите:

df.to_html(classes='my_class')

Или даже несколько:

df.to_html(classes=['my_class', 'my_other_class'])

Если вы используете IPython Notebook, здесь приведен полный рабочий пример:

In [1]: import numpy as np
        import pandas as pd
        from IPython.display import HTML, Javascript
In [2]: df = pd.DataFrame({'a': np.arange(10), 'b': np.random.randn(10)})
In [3]: HTML(df.to_html(classes='my_class'))
In [4]: Javascript('''$('.my_class tbody tr').filter(':last')
                                             .css('background-color', '#FF0000');
                   ''')

Или вы даже можете использовать простой CSS:

In [5]: HTML('''
        <style>
            .df tbody tr:last-child { background-color: #FF0000; }
        </style>
        ''' + df.to_html(classes='df'))

Возможности бесконечны:)

Изменить: создать html файл

import numpy as np
import pandas as pd

HEADER = '''
<html>
    <head>
        <style>
            .df tbody tr:last-child { background-color: #FF0000; }
        </style>
    </head>
    <body>
'''
FOOTER = '''
    </body>
</html>
'''

df = pd.DataFrame({'a': np.arange(10), 'b': np.random.randn(10)})
with open('test.html', 'w') as f:
    f.write(HEADER)
    f.write(df.to_html(classes='df'))
    f.write(FOOTER)

Ответ 2

Так как pandas теперь имеет функцию стилизации, вам больше не нужны JavaScript-хаки. Это чистое решение pandas:

import pandas as pd

df = []
df.append(dict(date='2016-04-01', sleep=11.2, calories=2740))
df.append(dict(date='2016-04-02', sleep=7.3, calories=3600))
df.append(dict(date='2016-04-03', sleep=8.3, calories=3500))

df = pd.DataFrame(df)

def highlight_last_row(s):
    return ['background-color: #FF0000' if i==len(s)-1 else '' for i in range(len(s))]

s = df.style.apply(highlight_last_row)

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

Ответ 3

Я не могу получить полный рабочий пример @Viktor для работы в ipython (jupyter), потому что последняя строка - это то, что получается, но перемещение HTML-рендеринга после того, как строка Javascript не работает для меня.

Пример "простой CSS" работает, и мы можем даже разместить Javascript <script> там. Это позволило мне отобразить сортируемый фреймворк Pandas, используя https://github.com/christianbach/tablesorter.

Вот полный пример:

df = pd.DataFrame({'a': np.arange(10), 'b': np.random.randn(10)})
from IPython.display import HTML, Javascript
HTML('''<script src='./tablesort/tablesort.min.js'></script>
<script src='./tablesort/src/sorts/tablesort.number.js'></script>
<script>
new Tablesort(document.getElementById('sort'));
</script>
'''+ df.to_html(classes ='sort" id = "sort'))

Обратите внимание, что файлы .js являются локальными. Обращение непосредственно к исходному коду github не будет работать, так как тип MIME равен plain/txt.

Обновление: я только заметил, что Pandas v0.17.1 выпустил функцию добавить стиль к HTML-выходному файлу DataFrame.