如何为 Pandas 数据框定义 html id

How to define html id for Pandas Dataframe

我想为 Pandas 数据框定义一个 css id,以使用 javascript 数据表呈现。可能吗?

有了这个:

pandas.DataFrame([[1, 2], [3, 4]]).to_html()

我明白了:

'<table border="1" class="dataframe">\n  <thead>\n    <tr style="text-align: right;">\n      <th></th>\n      <th>0</th>\n      <th>1</th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr>\n      <th>0</th>\n      <td>1</td>\n      <td>2</td>\n    </tr>\n    <tr>\n      <th>1</th>\n      <td>3</td>\n      <td>4</td>\n    </tr>\n  </tbody>\n</table>'

但是我想要一个 css id,像这样:

'<table border="1" id='mytable' class="dataframe">\n  <thead>\n    <tr style="text-align: right;">\n      <th></th>\n      <th>0</th>\n      <th>1</th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr>\n      <th>0</th>\n      <td>1</td>\n      <td>2</td>\n    </tr>\n    <tr>\n      <th>1</th>\n      <td>3</td>\n      <td>4</td>\n    </tr>\n  </tbody>\n</table>'

要在我的 html 页面中使用数据表:

$(document).ready(function() {
    $('#mytable').DataTable();
});

在 pandas 0.16 中,您可以使用 DataFrame.to_html() 方法做很多事情,但目前没有记录的方法可以将 id 添加到呈现的数据帧。

你可以在DataFrame上设置一个class,像这样:

df = pd.DataFrame({'foo':[1,2,3,4]})
df.to_html(classes='mytable')

结果:

<table border="1" class="dataframe mytable">
...

但这与 pandas 本机函数一样好。

如果确实需要使用cssid选项,可以通过两种方式解决。

正确但缓慢的解决方案

正确的方法是使用用于 xml 解析的库来解析 html 并自己添加 id。

像这样:

from xml.etree import ElementTree as et

t = et.fromstring(df.to_html())
t.set('id', 'mytable')
et.tostring(t)

结果:

<table border="1" class="dataframe" id="mytable">
...

附录:

除了 xml 库之外还有其他库,例如您可以使用 BeautifulSoup 来更改 html。 BeautifulSoup 库有更多闪亮的功能,可以让你做比在 table.

上设置和 id 更复杂的东西。

Hacky 但高效的解决方案

丑陋的方法是用正则表达式替换字符串,如下所示:

import re

re.sub(' mytable', '" id="mytable', df.to_html(classes='mytable'))

结果:

<table border="1" class="dataframe" id="mytable">
...

只需使用pandas.DataFrame([[1, 2], [3, 4]]).to_html(table_id='hello') 您将设置 table id 即 hello