将Pandas DataFrame 转换为带有全部标签的html

2024-06-08 07:11:48 发布

您现在位置:Python中文网/ 问答频道 /正文

此HTML有两个表:

'<div class="table-wrap"><table class="wrapped confluenceTable"><colgroup><col/><col/><col/><col/><col/><col/><col/><col/><col/><col/></colgroup><tbody><tr><th class="confluenceTh">Run</th><th class="confluenceTh">Date</th><th class="confluenceTh">Version</th><th class="confluenceTh">Model</th><th class="confluenceTh">OverallPrec</th><th class="confluenceTh">OverallRec</th><th class="confluenceTh"><span>PersonPrec</span></th><th class="confluenceTh"><span>Personrec</span></th><th class="confluenceTh">AnimalF1</th><th class="confluenceTh">VehicleF1</th></tr><tr><td class="confluenceTd">PR-191</td><td class="confluenceTd"><span>15,3/12/19,15:30</span></td><td class="confluenceTd"><span>1.2.191_abcdefg</span></td><td class="confluenceTd"><span>rfcn_dcn_0221</span></td><td class="confluenceTd"><span>0.95</span></td><td class="confluenceTd"><span>0.95</span></td><td class="confluenceTd"><span>0.98</span></td><td class="confluenceTd"><span>0.93</span></td><td class="confluenceTd"><span>0.85</span></td><td class="confluenceTd"><span>0.85</span></td></tr></tbody></table></div><div class="table-wrap"><table class="confluenceTable"><colgroup><col/><col/><col/><col/></colgroup><tbody><tr><th class="confluenceTh">Col1</th><th class="confluenceTh">Col2</th><th class="confluenceTh">Col3</th><th class="confluenceTh"><p>Col4</p></th></tr><tr><td colspan="1" class="confluenceTd">1</td><td colspan="1" class="confluenceTd">2</td><td colspan="1" class="confluenceTd">3</td><td colspan="1" class="confluenceTd">4</td></tr></tbody></table></div>'

df1型

^{pr2}$

df2型

   Col1  Col2  Col3  Col4
0     1     2     3     4

我想向df2追加一行

df2.loc[len(bdf)] = [2,3,4,5]

然后将其转换回html进行发布。df2.to_html无法工作,因为它缺少<div>class和许多其他标记

df2.to_html(classes='confluenceTh')
'<table border="1" class="dataframe confluenceTh">\n  <thead>\n    <tr style="text-align: right;">\n      <th></th>\n      <th>Col1</th>\n      <th>Col2</th>\n      <th>Col3</th>\n      <th>Col4</th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr>\n      <th>0</th>\n      <td>1</td>\n      <td>2</td>\n      <td>3</td>\n      <td>4</td>\n    </tr>\n    <tr>\n      <th>1</th>\n      <td>2</td>\n      <td>3</td>\n      <td>4</td>\n      <td>5</td>\n    </tr>\n  </tbody>\n</table>'

Tags: divtablecoltrclasscol1tdspan
1条回答
网友
1楼 · 发布于 2024-06-08 07:11:48

当将html作为字符串处理时,一个方便的选择是使用html解析器,例如beauthoulsoup。在

您可以复制其中一个表行以进行修改,从而基本上可以跳过确保类和其他标记的一致性的手动操作。在

import bs4
import copy


test = '<div class="table-wrap"><table class="wrapped confluenceTable"><colgroup><col/><col/><col/><col/><col/><col/><col/><col/><col/><col/></colgroup><tbody><tr><th class="confluenceTh">Run</th><th class="confluenceTh">Date</th><th class="confluenceTh">Version</th><th class="confluenceTh">Model</th><th class="confluenceTh">OverallPrec</th><th class="confluenceTh">OverallRec</th><th class="confluenceTh"><span>PersonPrec</span></th><th class="confluenceTh"><span>Personrec</span></th><th class="confluenceTh">AnimalF1</th><th class="confluenceTh">VehicleF1</th></tr><tr><td class="confluenceTd">PR-191</td><td class="confluenceTd"><span>15,3/12/19,15:30</span></td><td class="confluenceTd"><span>1.2.191_abcdefg</span></td><td class="confluenceTd"><span>rfcn_dcn_0221</span></td><td class="confluenceTd"><span>0.95</span></td><td class="confluenceTd"><span>0.95</span></td><td class="confluenceTd"><span>0.98</span></td><td class="confluenceTd"><span>0.93</span></td><td class="confluenceTd"><span>0.85</span></td><td class="confluenceTd"><span>0.85</span></td></tr></tbody></table></div><div class="table-wrap"><table class="confluenceTable"><colgroup><col/><col/><col/><col/></colgroup><tbody><tr><th class="confluenceTh">Col1</th><th class="confluenceTh">Col2</th><th class="confluenceTh">Col3</th><th class="confluenceTh"><p>Col4</p></th></tr><tr><td colspan="1" class="confluenceTd">1</td><td colspan="1" class="confluenceTd">2</td><td colspan="1" class="confluenceTd">3</td><td colspan="1" class="confluenceTd">4</td></tr></tbody></table></div>'

soup = bs4.BeautifulSoup(test)
tbl = soup.findAll('table')
table_body = tbl[-1].find('tbody') #select last table
rows = table_body.find_all('tr')

new_row = copy.deepcopy(rows[-1]) #select last row, and make a copy

#mutate that copy
cols = new_row.find_all('td')
new_data = [2, 3, 4, 5]
for col, data in zip(cols, new_data):
    col.string = str(data)

table_body.append(new_row) #append at the end of last table selected earlier

with open(r"D:\python\html.html","w") as f:
    f.write(soup.prettify())

尽管如此,在以这种方式解析html之后,很少需要将其附加到html中,通常在html创建之前/期间,您有更多的“上游”控制权。因此,我建议将其作为一种选择,要么在服务器端使用模板,要么在客户端使用javascript。在

相关问题 更多 >

    热门问题