如何为 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
我想为 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