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, но как это сделать после создания таблицы?
Любая помощь приветствуется.
Ответы
Ответ 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.