我正在尝试将Python Pandas Data Frame中定义的保存为HTML页面。另外我想使这个表保存为HTML表能力,可以按任何列的值进行过滤。你能提供可能的解决方案吗?在最后,这应该是表保存为HTML页面。我想将此代码合并到我的Python代码中。谢谢
答案 0 :(得分:34)
您可以使用pandas.DataFrame.to_html()
。
>>> import numpy as np
>>> from pandas import *
>>> df = DataFrame({'foo1' : np.random.randn(2),
'foo2' : np.random.randn(2)})
>>> df.to_html('filename.html')
这会将以下html保存到filename.html
。
<table border="1" class="dataframe">
<thead>
<tr style="text-align: right;">
<th></th>
<th>foo1</th>
<th>foo2</th>
</tr>
</thead>
<tbody>
<tr>
<th>0</th>
<td>-0.223430</td>
<td>-0.904465</td>
</tr>
<tr>
<th>1</th>
<td>0.317316</td>
<td>1.321537</td>
</tr>
</tbody>
</table>
&#13;
答案 1 :(得分:0)
.to_html()也可用于创建html字符串
import io
import pandas as pd
from numpy.random import randn
df = pd.DataFrame(
randn(5, 4),
index = 'A B C D E'.split(),
columns = 'W X Y Z'.split()
)
str_io = io.StringIO()
df.to_html(buf=str_io, classes='table table-striped')
html_str = str_io.getvalue()
print(html_str)
<table border="1" class="dataframe table table-striped">
<thead>
<tr style="text-align: right;">
<th></th>
<th>W</th>
<th>X</th>
<th>Y</th>
<th>Z</th>
</tr>
</thead>
<tbody>
<tr>
<th>A</th>
<td>0.302665</td>
<td>1.693723</td>
<td>-1.706086</td>
<td>-1.159119</td>
</tr>
<tr>
<th>B</th>
<td>-0.134841</td>
<td>0.390528</td>
<td>0.166905</td>
<td>0.184502</td>
</tr>
<tr>
<th>C</th>
<td>0.807706</td>
<td>0.072960</td>
<td>0.638787</td>
<td>0.329646</td>
</tr>
<tr>
<th>D</th>
<td>-0.497104</td>
<td>-0.754070</td>
<td>-0.943406</td>
<td>0.484752</td>
</tr>
<tr>
<th>E</th>
<td>-0.116773</td>
<td>1.901755</td>
<td>0.238127</td>
<td>1.996652</td>
</tr>
</tbody>
</table>
答案 2 :(得分:0)
这是一种无需使用to_html即可编写熊猫表的方法,还包括一个外部样式表:
html_string_start = '''
<html>
<head><title>Report Title</title></head>
<link rel="stylesheet" type="text/css" href="mystyle.css"/>
<body>
'''
html_string_end = '''
</body>
</html>
'''
with open(r'c:\temp\myfile.html', 'w') as f:
f.write(html_string_start)
f.write('<table>')
for header in dataframe.columns.values:
f.write('<th>'+str(header)+'</th>')
for i in range(len(dataframe)):
f.write('<tr>')
for col in dataframe.columns:
value = dataframe.iloc[i][col]
f.write('<td>'+str(value)+'</td>')
f.write('</tr>')
f.write('</table>')
f.write(html_string_end)