我想为 Pandas 数据帧定义一个CSS ID,以使用javascript dataTables呈现。是否可以?

有了这个:

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页面中使用dataTables,请执行以下操作:
$(document).ready(function() {
    $('#mytable').DataTable();
});

最佳答案

在 Pandas 0.16中,可以使用DataFrame.to_html()方法做很多事情,但是目前尚无记录的方法可以向渲染的数据帧添加ID。

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

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

结果是:
<table border="1" class="dataframe mytable">
...

但这和 Pandas 的 native 功能一样好。

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

正确但缓慢的解决方案

正确的方法是使用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库具有更多 Shiny 的功能,使您不仅可以在 table 上设置和设置ID,还可以做更复杂的事情。

顽强但高效的解决方案

丑陋的方法是用regexp替换字符串,如下所示:
import re

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

结果是:
<table border="1" class="dataframe" id="mytable">
...

关于python - 如何为Pandas Dataframe定义HTML ID,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30593711/

10-14 18:23
查看更多