默认pandas输出会截断行列,需同时设display.max_rows、max_columns、width、max_colwidth为none(或-1)才能完整显示;推荐用pd.option_context临时生效,避免全局污染。

默认情况下,pandas 的 print() 或 Jupyter 输出会截断行和列——这不是显示 bug,而是预设的节流策略;想看全,必须主动改 pd.set_option(),且部分选项需成对设置才生效。
为什么 pd.set_option('display.max_rows', None) 有时没用?
因为 display.max_rows 只控制「自动截断阈值」,但 pandas 还有 display.max_seq_items(影响 list/Series 内部嵌套显示)、display.max_columns(独立控制列数)、甚至 display.width(总字符宽)共同起作用。单独设 max_rows 为 None,若列太多或内容过长,仍会被折叠。
-
display.max_rows和display.max_columns都要设为None才真正“不限” -
display.width设为None或足够大的数(如1000),避免因终端宽度触发换行截断 -
display.max_colwidth默认50,长字符串会被省略,建议设为None或-1(pandas 1.4+ 支持-1表示无限制)
一次性显示全量数据的安全写法
推荐用上下文管理器临时生效,避免污染全局配置;尤其在共享 notebook 或生产脚本中,不建议长期保留 set_option 全局修改。
安全 Python 代码沙箱:在隔离的沙箱中执行任意 Python 代码,预装 requests、NumPy、pandas 库。返回 stdout、stderr。
import pandas as pd <h1>临时显示全部(推荐)</h1><p>with pd.option_context( 'display.max_rows', None, 'display.max_columns', None, 'display.width', None, 'display.max_colwidth', None ): print(df) # 这里输出完整内容</p><h1>退出后自动恢复原设置</h1>
注意:pd.option_context 不支持嵌套,且只对后续 print() 或直接变量输出生效;若在函数内返回 df 而未显式打印,不会触发该上下文效果。
Jupyter 中 DataFrame 直接显示(非 print)怎么控制?
Jupyter 的富输出调用的是 _repr_html_() 或 _repr_latex_(),它受 display.max_rows 等影响,但还额外依赖 display.html.table_schema 和 display.notebook_repr_html。最稳的方式是:
- 确保
display.notebook_repr_html为True(默认就是) - 禁用 schema 表格压缩:
pd.set_option('display.html.table_schema', False) - 若仍被折叠,可在 cell 开头加
%config InlineBackend.print_figure_kwargs = {'bbox_inches': None}(仅影响图,不相关但常被误配)
复杂点在于:这些选项存在版本差异——pandas 1.5+ 对 max_colwidth=None 支持更稳,旧版可能需用 -1;另外,display.max_info_rows 会影响 df.info() 输出,但它和 print(df) 是两套逻辑,别混用。
Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!










