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)
你可以用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更复杂的功能.
丑陋的方式是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)