如何为Pandas Dataframe定义html id

msa*_*aio 5 html python datatables pandas

我想为一个Pandas Dataframe定义一个css id来使用javascript dataTables进行渲染.可能吗?

有了这个:

pandas.DataFrame([[1, 2], [3, 4]]).to_html()
Run Code Online (Sandbox Code Playgroud)

我明白了:

'<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>'
Run Code Online (Sandbox Code Playgroud)

但是我想得到一个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>'
Run Code Online (Sandbox Code Playgroud)

要在我的html页面中使用dataTable:

$(document).ready(function() {
    $('#mytable').DataTable();
});
Run Code Online (Sandbox Code Playgroud)

Dur*_*mar 7

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


fir*_*ynx 5

你可以用pandas 0.16中的DataFrame.to_html()方法做很多事情,但是目前还没有记录的方法来向渲染的数据帧添加id.

您可以在DataFrame上设置类,如下所示:

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

结果是:

<table border="1" class="dataframe mytable">
...
Run Code Online (Sandbox Code Playgroud)

但这与pandas原生功能一样好.

如果你真的需要使用css id选项,你可以用两种方式解决它.

适当但缓慢的解决方案

正确的方法是使用库解析html进行xml解析并自己添加id.

像这样的东西:

from xml.etree import ElementTree as et

t = et.fromstring(df.to_html())
t.set('id', 'mytable')
et.tostring(t)
Run Code Online (Sandbox Code Playgroud)

结果是:

<table border="1" class="dataframe" id="mytable">
...
Run Code Online (Sandbox Code Playgroud)

附录:

除了xml库之外还有其他库,例如,您可以使用BeautifulSoup来更改html.BeautifulSoup库具有更多闪亮功能,使您可以执行比桌面上的设置和ID更复杂的功能.

Hacky但是表演解决方案

丑陋的方式是regexp替换字符串,如下所示:

import re

re.sub(' mytable', '" id="mytable', df.to_html(classes='mytable'))
Run Code Online (Sandbox Code Playgroud)

结果是:

<table border="1" class="dataframe" id="mytable">
...
Run Code Online (Sandbox Code Playgroud)