Python Pandas - 处理 HTML 数据
Pandas 库提供了丰富的功能来处理各种格式的数据。其中一种格式是 HTML(HyperText Markup Language),这是用于构建网页内容的一种常用格式。HTML 文件可能包含表格数据,可以使用 Pandas 库提取并分析这些数据。
HTML 表格是一种结构化格式,用于在网页中以行和列的形式表示表格数据。从 HTML 中提取这种表格数据可以通过使用 pandas.read_html() 函数实现。将 Pandas DataFrame 写回 HTML 表格也可以使用 DataFrame.to_html() 方法实现。
在本教程中,我们将学习如何使用 Pandas 处理 HTML 数据,包括读取 HTML 表格和将 Pandas DataFrame 写入 HTML 表格。
从 URL 读取 HTML 表格
pandas.read_html() 函数用于从 HTML 文件、字符串或 URL 中读取表格。它会自动解析 HTML 中的 <table> 元素,并返回一个 pandas.DataFrame 对象列表。
示例
以下是从 URL 中读取数据的基本示例,使用 pandas.read_html() 函数。
import pandas as pd
# 从 URL 读取 HTML 表格
url = "https://www.example.com"
tables = pd.read_html(url)
# 从 URL 访问第一个表格
df = tables[0]
# 显示结果 DataFrame
print('输出第一个 DataFrame:', df.head())
以上代码的输出如下 −
输出第一个 DataFrame:
| ID | NAME | AGE | ADDRESS | SALARY | |
|---|---|---|---|---|---|
| 0 | 1 | Ramesh | 32 | Ahmedabad | 2000.0 |
| 1 | 2 | Khilan | 25 | Delhi | 1500.0 |
| 2 | 3 | Kaushik | 23 | Kota | 2000.0 |
| 3 | 4 | Chaitali | 25 | Mumbai | 6500.0 |
| 4 | 5 | Hardik | 27 | Bhopal | 8500.0 |
从字符串读取 HTML 数据
可以通过 Python 的 io.StringIO 模块直接从字符串读取 HTML 数据。
示例
以下示例演示了如何使用 StringIO 读取 HTML 字符串,而无需保存到文件。
import pandas as pd from io import StringIO # 创建 HTML 字符串 html_str = """ <table> <tr><th>C1</th><th>C2</th><th>C3</th></tr> <tr><td>a</td><td>b</td><td>c</td></tr> <tr><td>x</td><td>y</td><td>z</td></tr> </table> """ # 读取 HTML 字符串 dfs = pd.read_html(StringIO(html_str)) print(dfs[0])
以上代码的输出如下 −
| C1 | C2 | C3 | |
|---|---|---|---|
| 0 | a | b | c |
| 1 | x | y | z |
示例
这是不使用 io.StringIO 模块读取 HTML 字符串的另一种方式。这里我们将 HTML 字符串保存到临时文件,然后使用 pandas.read_html() 函数读取。
import pandas as pd
# 创建 HTML 字符串
html_str = """
<table>
<tr><th>C1</th><th>C2</th><th>C3</th></tr>
<tr><td>a</td><td>b</td><td>c</td></tr>
<tr><td>x</td><td>y</td><td>z</td></tr>
</table>
"""
# 保存到临时文件并读取
with open("temp.html", "w") as f:
f.write(html_str)
df = pd.read_html("temp.html")[0]
print(df)
以上代码的输出如下 −
| C1 | C2 | C3 | |
|---|---|---|---|
| 0 | a | b | c |
| 1 | x | y | z |
从 HTML 文件处理多个表格
在读取包含多个表格的 HTML 文件时,我们可以使用 pandas.read_html() 函数的 match 参数来处理,读取包含特定文本的表格。
示例
以下示例使用 match 参数从包含多个表格的 HTML 文件中读取包含特定文本的表格。
import pandas as pd # 从 SQL 教程读取表格 url = "https://www.example.com" tables = pd.read_html(url, match='Field') # 访问表格 df = tables[0] print(df.head())
以上代码的输出如下 −
| Field | Type | Null | Key | Default | Extra | |
|---|---|---|---|---|---|---|
| 1 | ID | int(11) | NO | PRI | NaN | NaN |
| 2 | NAME | varchar(20) | NO | NaN | NaN | NaN |
| 3 | AGE | int(11) | NO | NaN | NaN | NaN |
| 4 | ADDRESS | char(25) | YES | NaN | NaN | NaN |
| 5 | SALARY | decimal(18,2) | YES | NaN | NaN | NaN |
将 DataFrame 写入 HTML
Pandas DataFrame 对象可以使用 DataFrame.to_html() 方法转换为 HTML 表格。如果参数 buf 设置为 None,该方法会返回一个字符串。
示例
以下示例演示了如何使用 DataFrame.to_html() 方法将 Pandas DataFrame 写入 HTML 表格。
import pandas as pd # 创建 DataFrame df = pd.DataFrame([[1, 2], [3, 4]], columns=["A", "B"]) # 将 DataFrame 转换为 HTML 表格 html = df.to_html() # 显示 HTML 字符串 print(html)
以上代码的输出如下 −
<table border="1" class="dataframe">
<thead>
<tr style="text-align: right;">
<th></th>
<th>A</th>
<th>B</th>
</tr>
</thead>
<tbody>
<tr>
<th>0</th>
<td>1</td>
<td>2</td>
</tr>
<tr>
<th>1</th>
<td>3</td>
<td>4</td>
</tr>
</tbody>
</table>