【发布时间】:2020-01-08 13:13:01
【问题描述】:
所以,我有一个包含多个表格的 html 文件,我正在读取这样的文件:
tables = pd.read_html(filename, decimal=',', thousands=None, header=0)
但是,pandas 将第一个表的标题设置为其他表的其余部分。有什么方法可以设置 pandas 来收集每个表的标题?
【问题讨论】:
标签: python-3.x pandas
所以,我有一个包含多个表格的 html 文件,我正在读取这样的文件:
tables = pd.read_html(filename, decimal=',', thousands=None, header=0)
但是,pandas 将第一个表的标题设置为其他表的其余部分。有什么方法可以设置 pandas 来收集每个表的标题?
【问题讨论】:
标签: python-3.x pandas
知道了。所以最后,感谢that genius reply 我成功了:
tables = pd.read_html(filename, decimal=',', thousands=None)
for t in tables:
header = t.iloc[0]
print(header)
t = t[1:]
t.columns=header
print(t)
所以我为每个表分配了不同的标题值。
【讨论】:
Pandas 通常会在不同的 Dataframe 中正确读取它。 我从不使用 headers=0,但在下面显示的情况下,无论是否正常,它都可以正常工作。
你的 html 文件是什么样子的? 也许你必须先清理你的 html 字符串。可以分享一下吗?
下面的例子效果很好
import pandas as pd
html_tables = """
<html>
<header>
<title>Data Tables</title>
</header>
<body>
Table1
<table>
<thead>
<tr>
<th>Title 1</th>
<th>Number 1</th>
<th>Year 1</th>
</tr>
</thead>
<tbody>
<tr>
<td>C</td>
<td>122,4</td>
<td>1972</td>
</tr>
<tr>
<td>Python</td>
<td>2,44</td>
<td>1989</td>
</tr>
<tr>
<td>Ruby</td>
<td>44,55</td>
<td>1995</td>
</tr>
</tbody>
</table>
Some text in between<br>
Table2
<table>
<thead>
<tr>
<th>Title 2</th>
<th>Number 2</th>
<th>Year 2</th>
</tr>
</thead>
<tbody>
<tr>
<td>C</td>
<td>111,4</td>
<td>1872</td>
</tr>
<tr>
<td>Python</td>
<td>4,55</td>
<td>1889</td>
</tr>
<tr>
<td>Ruby</td>
<td>66,55</td>
<td>1895</td>
</tr>
</tbody>
</table>
Text after
</body>
"""
dfs = pd.read_html(html_tables,decimal=',', thousands=None)
print("First Dataframe")
print("###################")
print(dfs[0])
print("###################")
print("Second Dataframe")
print("###################")
print(dfs[1])
First Dataframe
###################
Title 1 Number 1 Year 1
0 C 122.40 1972
1 Python 2.44 1989
2 Ruby 44.55 1995
###################
Second Dataframe
###################
Title 2 Number 2 Year 2
0 C 111.40 1872
1 Python 4.55 1889
2 Ruby 66.55 1895
【讨论】: