pandas 可以解析 HTML 表格(如网页中的 <table>)和 XML/HTML 标记语言,非常适合网络数据采集场景。


1. read_html()

从一个 HTML 字符串、URL 或本地文件中提取所有 <table> 标签,返回 DataFrame 的列表(页面上可能有多个表)。

1.1 常与参数

pd.read_html(
    io, match='.+', flavor=None, header=None, index_col=None,
    skiprows=None, attrs=None, parse_dates=False, thousands=',',
    encoding=None, decimal='.', converters=None, na_values=None,
    keep_default_na=True, displayed_only=True
)
参数说明
ioHTML 字符串、路径或 URL
match正则表达式,匹配表格中包含该文本的行才返回该表
flavor解析引擎:'bs4' 或 'lxml'
header表头行号
index_col索引列
skiprows跳过行
attrsHTML 属性过滤(如 {"class": "data"})
parse_dates是否解析日期
thousands千位分隔符
encoding编码
converters列转换函数
na_values缺失值标识
displayed_only是否只显示可见的行/列(默认 True)

1.2 使用示例

# 读取 URL 中的第一个表格
dfs = pd.read_html('https://example.com/data.html')
df = dfs[0]
 
# 匹配包含 '人口' 的表格
dfs = pd.read_html('page.html', match='人口')
 
# 指定属性过滤
dfs = pd.read_html('page.html', attrs={'class': 'stats'})
 
# 指定跳过行与列
dfs = pd.read_html('page.html', skiprows=2, index_col=0)

依赖提示

read_html() 要求安装 lxml 或 BeautifulSoup4(bs4)。未安装时会报错并提示缺少依赖。


2. to_html()

将 DataFrame 输出为 HTML <table> 字符串,可直接保存为 .html 文件用于报告或网页展示。

2.1 常用参数

DataFrame.to_html(
    buf=None, columns=None, col_space=None, header=True, index=True,
    na_rep='NaN', formatters=None, float_format=None, sparsify=None,
    index_names=True, justify=None, max_rows=None, max_cols=None,
    show_dimensions=False, decimal='.', bold_rows=True, classes=None,
    escape=True, notebook=False, border=1, table_id=None,
    render_links=False
)
参数说明
buf输出文件路径或文件对象,None 返回字符串
columns指定输出列
col_space列宽
header是否输出表头
index是否输出索引
na_rep缺失值显示内容
formatters列格式化函数
float_format浮点格式
index_names是否显示索引名称
justify对齐方式
max_rows / max_cols最大行列数
bold_rows索引是否加粗
classesCSS 类名(字符串或列表)
escape是否转义 HTML 特殊字符
border表格边框宽度
table_idHTML id 属性
render_links是否将 URL 渲染为链接

2.2 使用示例

# 输出为 HTML 字符串
html = df.to_html(index=False)
 
# 保存为文件
df.to_html('report.html', classes='table table-striped', index=False)
 
# 自定义格式
df.to_html(
    'report.html',
    float_format='%.2f',
    na_rep='-',
    justify='center'
)

3. read_xml()

从 XML 文件或字符串中解析数据,支持扁平化路径匹配,返回 DataFrame。

3.1 函数签名

pd.read_xml(
    path_or_buffer, xpath='.//*', namespaces=None, elems_only=False,
    attrs_only=False, names=None, encoding=None, parse_dates=False,
    parser='lxml', stylesheet=None, compression='infer',
    storage_options=None, dtype=None
)

3.2 参数详解

参数说明
path_or_bufferXML 文件路径、URL、文件对象或 XML 字符串
xpathXPath 表达式,选择要解析的元素节点
namespacesXML 命名空间映射字典(如 {'ns': 'http://...'})
elems_only仅解析元素文本(不包含属性)
attrs_only仅解析元素属性
names列名列表
encoding编码
parse_dates是否解析日期
parser解析引擎:'lxml' 或 'etree'
stylesheetXSLT 样式表路径(用于转换 XML)
compression压缩格式
storage_options云存储
dtype列类型映射

3.3 使用示例

import pandas as pd
 
xml_str = """
<data>
  <record>
    <name>张三</name>
    <age>25</age>
  </record>
  <record>
    <name>李四</name>
    <age>30</age>
  </record>
</data>
"""
 
df = pd.read_xml(xml_str, xpath='.//record')
#    name age
# 0  张三  25
# 1  李四  30
# 带命名空间的 XML
df = pd.read_xml(
    'data.xml',
    xpath='//ns:record',
    namespaces={'ns': 'http://example.com/schema'}
)
 
# 只读取属性
df = pd.read_xml('data.xml', xpath='//book', attrs_only=True)

4. to_xml()

将 DataFrame 输出为 XML 文档。

4.1 函数签名

DataFrame.to_xml(
    path_or_buffer=None, index=True, root_name='data',
    row_name='row', na_rep=None, attr_cols=None, elem_cols=None,
    namespaces=None, prefix=None, encoding='utf-8',
    xml_declaration=True, pretty_print=True, parser='lxml',
    stylesheet=None, compression='infer', storage_options=None
)

4.2 参数详解

参数说明
index是否包含索引
root_name根节点名称(默认 'data')
row_name行节点名称(默认 'row')
na_rep缺失值表示
attr_cols作为属性的列
elem_cols作为元素的列
namespaces命名空间
prefix命名空间前缀
encoding编码
xml_declaration是否包含 XML 声明
pretty_print是否美化缩进
parser解析引擎
stylesheetXSLT 样式表

4.3 使用示例

# 基本输出
xml_str = df.to_xml()
# <data>
#   <row>
#     <index>0</index>
#     <name>张三</name>
#     <age>25</age>
#   </row>
# </data>
 
# 自定义根节点与行节点
df.to_xml('output.xml', root_name='users', row_name='user')
 
# 指定某些列作为属性
df.to_xml('output.xml', attr_cols=['id'])

依赖提示

read_xml() / to_xml() 默认使用 lxml 作为解析器,请确保已安装:pip install lxml。


文档 5:4.4 Excel.md