Jupyter中DataFrame显示不全需同时设置display.max_rows和display.max_columns为None,且必须关闭display.expand_frame_repr、设display.width为None,并按需调整display.max_colwidth和float_format/precision。

只设 display.max_rows 或只设 display.max_columns 都不行
很多人试过 pd.set_option('display.max_rows', None),发现列还是被砍掉;或者只设了列,结果行又被截成前5后5。这是因为 pandas 的显示逻辑是「行和列两个限制必须同时解除」,缺一不可。
-
display.max_rows控制最多显示多少行,设为None才放开限制 -
display.max_columns控制最多显示多少列,同样必须设为None - 两者任意一个没放开,Jupyter 就按更严的那个来裁剪——不是“部分生效”,而是“直接卡死”
display.max_colwidth 不设,长文本照样被截成省略号
即使行列都显示全了,URL、JSON、日志这类长字符串仍会变成 ... 。这不是 bug,是 display.max_colwidth 在起作用,默认值是 50。
- 设为
None:完全取消截断,适合调试时看原始内容 - 设为具体数字(如
150):避免某列撑爆整个输出区,兼顾可读性与空间 - 注意:该选项对
object类型列有效,对int/float列无影响 - 如果某列值是嵌套 dict/list,
max_colwidth只管外层字符串长度,内部结构仍可能被repr()缩略
display.expand_frame_repr 必须关掉,否则自动换行会破坏表格结构
Jupyter 默认把宽 DataFrame 拆成多行显示(类似文本换行),导致列错位、表头对不齐。这不是渲染问题,是 pandas 主动做的“适应性压缩”。
- 执行
pd.set_option('display.expand_frame_repr', False)禁用该行为 - 配合
display.width = None(不是0),防止列名被强制折行 - 这两项不设,即使行列宽度都放开,你看到的也可能是一堆错行的碎片
浮点数显示混乱?display.float_format 和 display.precision 要一起调
科学计数法(如 1.234568e+06)和小数位忽长忽短,不是数据变了,是显示格式没统一。
-
pd.set_option('display.float_format', '{:.4f}'.format):固定小数位,禁用科学计数法 -
pd.set_option('display.precision', 4):控制所有浮点列的默认精度,和float_format协同生效 - 单独设其中一个,另一项可能覆盖或冲突,导致部分列仍用 e 表示
- 这些设置不影响实际数值,只改显示——导出 CSV/Excel 时不会带格式
display.expand_frame_repr 和 display.width 这一对,它们不报错、不警告,但会让表格“看起来全了,其实歪了”。


















