必须同时设置行数、列数、列宽三类选项才能显示全,单设一个无效;推荐执行四行set_option将max_rows、max_columns、width、max_colwidth均设为none。

为什么 pd.set_option 设了还不显示全?
因为 Pandas 默认对列数、行数、列宽都做了截断,单设一个选项(比如只设 display.max_columns)没用,必须同时控制三类限制:列数量、行数量、每列内容长度。常见现象是 DataFrame 看起来“被砍掉几列”或“某列显示为 ...”,其实是 display.max_colwidth 或 display.width 在起作用。
实操建议:
- 先运行
pd.describe_option('display')查看当前所有 display 相关配置项及其说明 - 关键组合设置(推荐一次性执行):
import pandas as pd
pd.set_option('display.max_rows', None)
pd.set_option('display.max_columns', None)
pd.set_option('display.width', None)
pd.set_option('display.max_colwidth', None)
注意:None 表示不限制;旧版本 Pandas(display.max_colwidth 设为 -1 才等效于不限制,新版本统一用 None 即可。
想局部临时显示全,又不想改全局配置?
用上下文管理器 pd.option_context,退出作用域自动恢复原设置,适合 Jupyter 中快速预览或调试时使用。
实操建议:
- 只对当前代码块生效,不影响后续其他 DataFrame 输出
- 支持嵌套,但不推荐多层嵌套以防逻辑混乱
- 示例:
with pd.option_context('display.max_rows', None,
'display.max_columns', None,
'display.width', None,
'display.max_colwidth', None):
print(df.head()) # 这里会完整显示
如果只想展开某列的长文本(比如日志字段),单独设 display.max_colwidth 就够了,不用动其他项。
快速生成专业的 Python 脚本和应用代码。一键创建完整项目结构,支持CLI、API、爬虫、Bot、Django等多种项目类型,包含完整的项目结构、配置文件、依赖管理、测试、README和文档。
输出到终端 vs Jupyter Notebook 显示效果不同?
是的。Jupyter 使用 HTML 渲染 DataFrame,受 display.html.table_schema 和前端 CSS 影响;终端纯文本输出则严格依赖 display.width 和 display.max_colwidth。同一个 set_option 设置,在两者中表现可能不一致。
实操建议:
- Jupyter 中若列名或内容仍被截断,尝试加
pd.set_option('display.html.table_schema', False)关闭 schema 渲染(部分版本有效) - 终端中如果换行错乱,优先调大
display.width(例如设为200或300),而不是盲目设None,否则可能整行挤成一团难以阅读 - 导出为 CSV/Excel 不受这些选项影响,它们只控制屏幕打印
设置后内存或性能变差?
不会。这些 set_option 只影响显示逻辑,不改变 DataFrame 内部结构或计算过程。但要注意:当 display.max_rows=None 且 DataFrame 有百万级行时,print(df) 会试图把全部数据转成字符串再输出,可能导致终端卡死或日志爆炸——这不是 Pandas 慢,是终端/IDE 的渲染瓶颈。
实操建议:
- 生产环境脚本中避免无条件设
max_rows=None,可用min(len(df), 100)动态控制 - 检查是否误在循环里反复调用
set_option,虽无害但没必要 - 重启 Python 内核后所有
set_option会重置,如需持久化,写进启动脚本或.ipython/profile_default/startup/下的 py 文件
真正容易被忽略的是 display.width —— 它不像行列限制那么直观,但一旦终端宽度不够,Pandas 就会主动折行或省略列,哪怕你已经放开行列限制。
Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!










