我想为 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/