核心内容

将 DataFrame 导出为 CSV、JSON、HTML、LaTeX、Markdown、XML 等文本格式。

一、to_csv() — 导出 CSV

最常用的导出方式,通用性最强。

import pandas as pd
import numpy as np
 
df = pd.DataFrame({
    'id': [1, 2, 3],
    'name': ['Alice', 'Bob', 'Charlie'],
    'score': [95.5, 88.0, 76.25]
})
 
# 基础导出
df.to_csv('output.csv')
 
# 常用参数组合
df.to_csv(
    'output.csv',
    sep=',',                 # 分隔符
    na_rep='NULL',           # 缺失值表示
    float_format='%.2f',     # 浮点格式
    columns=['id', 'name'],  # 选择列
    header=True,             # 是否写列名
    index=False,             # 是否写行索引
    index_label='id',        # 索引列名
    encoding='utf-8-sig',    # 编码(Excel 兼容)
    mode='w',                # 'w' 覆盖 / 'a' 追加
    compression='gzip',      # 压缩
    date_format='%Y-%m-%d',  # 日期格式
    quoting=1,               # QUOTE_ALL
    quotechar='"',           # 引号字符
    escapechar='\\',         # 转义符
    decimal='.',             # 小数点
    line_terminator='\n',    # 行终止符
    chunksize=10000,         # 分块写入
    errors='strict'          # 编码错误处理
)
 
# 不写索引直接追加
df.to_csv('output.csv', index=False, mode='a', header=False)
参数说明
sep字段分隔符(默认 ,)
na_rep缺失值字符串表示
float_format浮点格式字符串
columns导出列子集
header是否写列名(可传字符串列表自定义)
index是否写行索引
index_label索引列名
mode’w’ 覆盖、‘a’ 追加
encoding编码(中文推荐 utf-8-sig)
compression压缩方式
quoting引用规则(csv.QUOTE_*)
date_format日期时间格式
chunksize每次写入行数

二、to_json() — 导出 JSON

# 默认格式
df.to_json('data.json')
 
# orient 方向选择
df.to_json('orient_records.json', orient='records')    # [{...},{...}]
df.to_json('orient_split.json',   orient='split')      # {"columns":[...],"index":[...],"data":[...]}
df.to_json('orient_index.json',   orient='index')      # {"0":{...},"1":{...}}
df.to_json('orient_columns.json', orient='columns')    # {"col":{...}}
df.to_json('orient_values.json',  orient='values')     # [[...],[...]]
df.to_json('orient_table.json',   orient='table')      # {"schema":...,"data":...}
 
# 常用参数
df.to_json(
    'data.json',
    orient='records',
    date_format='iso',          # 'iso' ISO8601 / 'epoch' 时间戳
    double_precision=10,        # 浮点精度
    force_ascii=False,          # 是否强制 ASCII(中文需 False)
    date_unit='ms',             # 时间戳单位:s / ms / us / ns
    default_handler=str,        # 未知类型处理
    lines=True,                 # JSON Lines(每行一个对象)
    compression='gzip',
    index=False,                # orient 包含索引时是否写
    indent=2                    # 缩进美化
)
orient结构适用场景
records数组对象最常用,API 对接
split分离 schema / datapandas 原生还原
index以索引为键层级数据
columns以列为键列优先数据
values纯数组最省空间
table含 schema完整元数据

三、to_html() — 导出 HTML

# 基础导出
df.to_html('table.html')
 
# 常用参数
df.to_html(
    'table.html',
    buf='table.html',
    columns=['name', 'score'],
    col_space=100,             # 列宽
    header=True,
    index=True,
    na_rep='N/A',
    formatters={'score': lambda x: f'{x:.1f}'},   # 格式化函数
    float_format='%.2f',
    sparsify=True,             # 多级索引合并显示
    index_names=True,
    justify='center',          # 列标题对齐
    border=1,                  # table border
    classes='dataframe',       # CSS 类名
    escape=True,               # HTML 转义
    max_rows=100,
    max_cols=20,
    show_dimensions=True,
    table_id='my_table',
    render_links=True          # URL 自动转链接
)

四、to_latex() — 导出 LaTeX

# 基础导出
df.to_latex('table.tex')
 
# 常用参数
df.to_latex(
    'table.tex',
    buf='table.tex',
    columns=['name', 'score'],
    header=True,
    index=True,
    na_rep='-',
    formatters={'score': '{:.2f}'.format},
    float_format='%.2f',
    sparsify=True,              # 多级索引合并
    index_names=True,
    bold_rows=True,             # 行索引加粗
    column_format='lc',         # 列对齐格式
    longtable=False,            # 跨页表格
    escape=True,                # 特殊字符转义
    encoding='utf-8',
    multicolumn=True,
    multirow=True,
    caption='表1:测试数据',
    label='tab:data',
    position='H',
    hrules=True                 # booktabs 横线
)

五、to_markdown() — 导出 Markdown

# 导出为 Markdown 表格
md_str = df.to_markdown()
print(md_str)
# |    | id | name   | score |
# |---:|----:|:-------|------:|
# |  0 |  1 | Alice  | 95.5  |
# |  1 |  2 | Bob    | 88    |
# |  2 |  3 | Charlie| 76.25 |
 
# 写入文件
df.to_markdown('table.md')
 
# 参数
df.to_markdown(
    buf='table.md',
    mode='w',               # 'a' 追加
    index=True,             # 是否包含索引
    tablefmt='pipe',        # 'pipe' / 'github' / 'grid' / 'html' / 'latex' 等
    headers=['编号', '姓名', '分数'],   # 自定义表头
    showindex=True,
    floatfmt='.2f',         # 浮点格式
    intfmt=',d',            # 整数格式
    stralign='left',
    disable_numparse=False
)

tablefmt 常用值

'pipe'(GitHub 风格)、'grid'(ASCII 网格)、'html'、'latex'、'simple'、'rst'。

六、to_xml() — 导出 XML

# 基础导出
df.to_xml('data.xml')
 
# 常用参数
df.to_xml(
    'data.xml',
    path_or_buffer='data.xml',
    index=False,               # 是否包含索引
    root_name='data',          # 根节点名
    row_name='record',         # 行节点名
    na_rep='',                 # 缺失值表示
    attr_cols=['id'],          # 作为属性的列
    elem_cols=['name', 'score'],  # 作为元素的列
    namespaces={'prefix': 'http://example.com'},  # 命名空间
    prefix=None,
    encoding='utf-8',
    xml_declaration=True,      # 是否包含 XML 声明
    pretty_print=True,         # 美化缩进
    parser='lxml',             # 'lxml' / 'etree'
    stylesheet='style.xsl'     # XSL 样式表
)

输出示例

<?xml version="1.0" encoding="utf-8"?>
<data>
  <record id="1">
    <name>Alice</name>
    <score>95.5</score>
  </record>
  <record id="2">
    <name>Bob</name>
    <score>88.0</score>
  </record>
</data>

文本格式对比

格式文件大小读写速度保留 dtype互操作性
CSV大慢否极强
JSON大慢部分强(Web)
HTML大中否网页展示
LaTeX小中否学术写作
Markdown小快否README / 文档
XML大慢否企业系统

相关笔记