杰瑞科技汇

如何优雅输出Python DataFrame数据?

下面我将详细介绍几种最常见的输出方法,从最基础的到更高级的。

如何优雅输出Python DataFrame数据?-图1
(图片来源网络,侵删)

在控制台/终端显示

这是最常用的方式,用于在开发过程中快速检查数据。

print(df)

这是最直接的方法,但有一个小缺点:DataFrame 太宽,它会自动截断显示,并且列名可能会换行。

import pandas as pd
import numpy as np
# 创建一个示例 DataFrame
data = {'姓名': ['张三', '李四', '王五', '赵六'],
        '年龄': [25, 30, 28, 35],
        '城市': ['北京', '上海', '广州', '深圳']}
df = pd.DataFrame(data)
print(df)

输出:

   姓名  年龄  城市
0  张三  25  北京
1  李四  30  上海
2  王五  28  广州
3  赵六  35  深圳

display(df)

Jupyter NotebookJupyterLab 等交互式环境中,display() 是首选,它会渲染出一个格式更美观、带有 HTML 样式的表格,并且可以显示更多内容(如滚动条)。

如何优雅输出Python DataFrame数据?-图2
(图片来源网络,侵删)
# 在 Jupyter Notebook 中运行
display(df)

输出: (一个格式漂亮的HTML表格)

df (直接在交互式环境中输入变量名)

在 Jupyter Notebook 中,你甚至可以直接输入变量名 df 然后运行,效果和 display(df) 一样。

# 在 Jupyter Notebook 中运行
df

调整显示选项

当你的 DataFrame 非常大或非常宽时,默认显示可能不够用。pandas 提供了几个设置来调整显示。

pd.set_option()

你可以使用 pd.set_option() 来修改全局显示设置。

如何优雅输出Python DataFrame数据?-图3
(图片来源网络,侵删)
选项 描述 示例
pd.set_option('display.max_rows', N) 设置最大显示行数,超过部分会被省略。None 表示显示所有行。 pd.set_option('display.max_rows', 100)
pd.set_option('display.max_columns', N) 设置最大显示列数,超过部分会被省略。None 表示显示所有列。 pd.set_option('display.max_columns', 20)
pd.set_option('display.width', N) 设置显示区域的宽度(字符数)。 pd.set_option('display.width', 200)
pd.set_option('display.precision', N) 设置浮点数的显示精度(小数位数)。 pd.set_option('display.precision', 2)
pd.set_option('display.expand_frame_repr', False) 如果为 True,当 DataFrame 太宽时会自动换行,设为 False 可以强制在一行显示,但可能需要水平滚动。 pd.set_option('display.expand_frame_repr', False)

示例:

# 创建一个更宽的 DataFrame
wide_data = {f'Col_{i}': np.random.rand(5) for i in range(15)}
wide_df = pd.DataFrame(wide_data)
# 设置显示所有列
pd.set_option('display.max_columns', None)
# 设置浮点数显示2位小数
pd.set_option('display.precision', 2)
print(wide_df)

保存到文件

这是将数据处理结果持久化的关键步骤。

保存为 CSV 文件

.to_csv() 是最常用的方法。

# 基本用法
df.to_csv('output.csv', index=False, encoding='utf-8-sig')
# 参数解释:
# - 'output.csv': 输出的文件名。
# - index=False: **非常重要**,不将 DataFrame 的行索引 (0, 1, 2...) 写入文件,如果不设置,索引会成为文件的第一列。
# - encoding='utf-8-sig': 使用 UTF-8 编码,并带有 BOM (签名),这能确保 Excel 等软件能正确识别中文,避免乱码。
# - sep=',': 指定分隔符,默认是逗号,也可以用 `sep='\t'` 保存为 TSV 文件。

保存为 Excel 文件

.to_excel() 功能强大,可以指定工作表、格式等。

# 需要安装 openpyxl 库: pip install openpyxl
df.to_excel('output.xlsx', sheet_name='员工信息', index=False)
# 参数解释:
# - 'output.xlsx': 输出的 Excel 文件名。
# - sheet_name='员工信息': 指定数据要保存到哪个工作表。
# - index=False: 同上,不写入行索引。

保存为其他格式

pandas 还支持多种其他格式。

格式 方法 常用场景
JSON .to_json('output.json') 用于 Web API 交换数据。
HTML .to_html('output.html') 生成一个独立的 HTML 报告页面。
SQL .to_sql('table_name', connection_object) 将数据直接写入数据库。
Pickle .to_pickle('output.pkl') Python 对象的二进制格式,保存和加载速度极快,适合临时存储,但不跨语言。

输出到数据库

如果你的数据需要存入 MySQL, PostgreSQL, SQLite 等数据库,可以使用 to_sql

# 需要安装 SQLAlchemy 库: pip install SQLAlchemy
from sqlalchemy import create_engine
# 创建一个数据库连接引擎 (以 SQLite 为例)
# 'sqlite:///database.db' 表示创建一个名为 database.db 的本地 SQLite 数据库文件
engine = create_engine('sqlite:///my_database.db')
# 将 DataFrame 写入数据库
df.to_sql('employees', con=engine, if_exists='replace', index=False)
# 参数解释:
# - 'employees': 数据库中的表名。
# - con=engine: 数据库连接引擎。
# - if_exists='replace': 如果表已存在,则替换它,可选值: 'fail' (报错), 'append' (追加数据)。
# - index=False: 不写入行索引。

输出到网页/应用程序

在构建 Web 应用时,你可能需要将 DataFrame 转换为 HTML 或 JSON。

转换为 HTML 字符串

html_string = df.to_html(classes='table table-striped', table_id='my-table')
# 参数:
# - classes: 添加 CSS 类,方便用 Bootstrap 等框架美化。
# - table_id: 为表格设置一个 ID,方便用 JavaScript 操作。
# 你可以将这个 html_string 写入一个 .html 文件,或在 Flask/Django 模板中使用。
with open('report.html', 'w', encoding='utf-8') as f:
    f.write(html_string)

转换为 JSON 字符串

# orient='records' 将 DataFrame 转换为 JSON 数组,每个元素是一个对象(字典)
json_string = df.to_json(orient='records', force_ascii=False)
# 参数:
# - orient: 'records' 是最常用的格式,也支持 'split', 'index', 'values', 'table'。
# - force_ascii=False: 确保中文字符不被转义,直接显示。
print(json_string)
# 输出: [{"姓名":"张三","年龄":25,"城市":"北京"},{"姓名":"李四","年龄":30,"城市":"上海"}]

总结与最佳实践

场景 推荐方法 关键点
快速调试/查看数据 print(df) 或在 Jupyter 中直接输入 df 对于小数据集足够用。
在 Jupyter 中查看 display(df) 格式最美观,功能最全。
处理大数据/宽数据 pd.set_option() + print(df) 调整 max_rows, max_columns 等选项。
数据持久化/分享 df.to_csv() / df.to_excel() 记得设置 index=False 和正确的 encoding
Web 开发 df.to_html() / df.to_json() 根据前后端需求选择合适的格式。
数据存入数据库 df.to_sql() 需要配合 SQLAlchemy 使用。

掌握这些输出方法,你就能灵活地在不同场景下展示和使用你的 pandas 数据了。

分享:
扫描分享到社交APP
上一篇
下一篇