HOWTO · Pandas
使用 Python 将 Pandas DataFrame 保存为 HTML
本教程演示如何将 Pandas DataFrame 转换为 Python 中的 HTML 表格。
本页内容
有时我们将 DataFrame 渲染为 HTML 表格以在网页中表示它。如果我们想在 HTML 中显示同一个表格,我们不需要在 HTML 中编写它的代码来重新制作那个表格。
我们可以使用内置的方法或在 python 中手动编写代码来将 Pandas DataFrame 转换为 HTML 表格,这将在本文中讨论。
使用 to_html() 方法将 Pandas DataFrame 保存为 HTML 文件
在下面的代码中,我们有学生的数据。我们使用 pandas 库中提供的方法 to_html() 将 Pandas DataFrame 转换为 HTML。
我们将使用我们的 DataFrame 对象调用此方法,并传递表示表格的新 HTML 文件的名称。如果我们只传递 HTML 文件的名称,它将在当前目录中创建。
我们还可以提供路径以及 HTML 文件的名称,以将其保存在其他位置。此方法会将整个 DataFrame 转换为 <table> 元素,并且列将包裹在 <thead> 元素中。
DataFrame 的每一行都将被包裹在 HTML 的 <tr> 元素中。此方法将返回 DataFrame 的 HTML 格式。
示例代码:
# Python 3.x
import pandas as pd
df = pd.read_csv("Student.csv")
display(df)
df.to_html("Student.html")
输出:
输出将在 Student.html 文件中。
HTML - 代码:
<table border="1" class="dataframe">
<thead>
<tr style="text-align: right;">
<th></th>
<th>ST_Name</th>
<th>Department</th>
<th>Marks</th>
</tr>
</thead>
<tbody>
<tr>
<th>0</th>
<td>Jhon</td>
<td>CS</td>
<td>60</td>
</tr>
<tr>
<th>1</th>
<td>Alia</td>
<td>EE</td>
<td>80</td>
</tr>
<tr>
<th>2</th>
<td>Sam</td>
<td>EE</td>
<td>90</td>
</tr>
<tr>
<th>3</th>
<td>Smith</td>
<td>CS</td>
<td>88</td>
</tr>
</tbody>
</table>
手动将 Pandas DataFrame 转换为 HTML 表
将 Pandas DataFrame 保存为 HTML 的另一种方法是从头开始编写代码以进行手动转换。
首先,我们在下面的代码中以 w+ 模式打开了一个文件 student.html。如果文件不存在,此模式将创建一个文件。
在这个文件中,我们的 HTML 代码将被保存。在这里,我们将整个表包裹在 <table> 中,然后我们遍历 DataFrame 的列并将它们包裹在 <th> 中。
最后,我们对行进行了迭代并将它们包装在 <tr> 中。
示例代码:
# Python 3.x
import pandas as pd
df = pd.read_csv("Student.csv")
display(df)
with open(r"student.html", "w+") as f:
f.write("<table>")
for header in df.columns.values:
f.write("<th>" + str(header) + "</th>")
for i in range(len(df)):
f.write("<tr>")
for col in df.columns:
value = df.iloc[i][col]
f.write("<td>" + str(value) + "</td>")
f.write("</tr>")
f.write("</table>")
输出:
HTML - 代码:
<table><th>ST_Name</th><th>Department</th><th>Marks</th><tr><td>Jhon</td><td>CS</td><td>60</td></tr><tr><td>Alia</td><td>EE</td><td>80</td></tr><tr><td>Sam</td><td>EE</td><td>90</td></tr><tr><td>Smith</td><td>CS</td><td>88</td></tr></table>