要完整显示 dataframe,必须同时设置 pd.set_option('display.max_rows', none)、pd.set_option('display.max_columns', none)、pd.set_option('display.expand_frame_repr', false)、pd.set_option('display.width', none)、pd.set_option('display.max_colwidth', none) 和 pd.set_option('display.html.table_schema', false),缺一不可。

pd.set_option('display.max_rows', None) 能让 DataFrame 直接显示所有行,但只设这一项不够——Jupyter 仍可能因列数限制、自动换行或 HTML 渲染机制导致“看起来没全显示”。
必须同时放开行和列限制
只调 display.max_rows,但 display.max_columns 还卡在默认的 20,宽表照样被砍掉中间列;反之亦然。两者缺一不可:
pd.set_option('display.max_rows', None)pd.set_option('display.max_columns', None)
注意:None 是关键字,不是字符串 "None";设成数字(如 1000)只放行部分,不是“全部”。
禁用自动换行压缩(否则列名错位)
Jupyter 对长表格会启用 display.expand_frame_repr 自动折行,导致列名被断开、对齐错乱。关掉它:
pd.set_option('display.expand_frame_repr', False)-
pd.set_option('display.width', None)—— 这个None表示不限字符宽度,不是设成0或负数
不关这个,即使行/列都放开,也可能看到列名被强行拆成两行,实际数据却对不上列。
长文本列依然被截断?检查 max_colwidth
URL、JSON 字段哪怕列显示出来了,也常以 ... 结尾——这是 display.max_colwidth 在起作用:
-
pd.set_option('display.max_colwidth', None):彻底放开单格内容长度 - 若设为数字(如
100),超长内容仍会被截断 - 注意:对
object类型中嵌套的 list/dict,max_colwidth不影响其内部结构,只能靠df[col].apply(repr)临时展开
HTML 渲染层还有隐藏开关
Jupyter 默认走 _repr_html_(),而它受 display.html.table_schema 影响——开启时会压缩表格结构,导致“明明设了 all rows 却还是只看到头尾”。关掉它:
pd.set_option('display.html.table_schema', False)- 确认
display.notebook_repr_html为True(默认就是,一般不用动)
这个选项容易被忽略,尤其在较新版本 Pandas(1.5+)和 JupyterLab 中,不开它,前面所有设置都可能白调。
真正麻烦的不是参数多,而是它们之间有依赖:放开行但列被砍、关了换行但 HTML 压缩还在、max_colwidth 设了却忘了关 schema——漏一个,就还剩省略号。











