必须同时设置max_rows和max_columns为None才能显示全部行列,因二者独立控制;还需设expand_frame_repr=False和width=None防换行压缩;max_colwidth=None仅解决字符串截断,不展开嵌套结构。

直接设 pd.set_option('display.max_rows', None) 和 pd.set_option('display.max_columns', None) 就能显示全部行列,但只设一个没用,必须两个一起调,否则照样被截断。
为什么只设 max_rows 或 max_columns 还是缺内容
这是最常踩的坑:pandas 的行列限制是独立控制的。设了 max_rows=None 但 max_columns 还是默认 20,宽表依然只显示前 20 列;反之亦然。Jupyter 不会自动帮你“补全另一个维度”。
-
pd.set_option('display.max_rows', None)解除行数限制(注意:超 1000 行时 Jupyter 会启用滚动容器,但数据完整) -
pd.set_option('display.max_columns', None)解除列数限制(避免列名被折叠或省略) - 两者必须同时执行,顺序无关
列名或单元格内容被折行、撑出横向滚动条
即使行列都放开,Jupyter 默认仍会对过宽的 DataFrame 做换行压缩,导致列名错位、值被切开。关键在 expand_frame_repr 和 width。
-
pd.set_option('display.expand_frame_repr', False):强制整张表在单行渲染,不跨多行折叠 -
pd.set_option('display.width', None):设为None(不是 0!),表示不限制字符宽度,防止列名被硬折行 - 如果显示器不够宽,仍会出现横向滚动条——这是浏览器行为,不是 pandas 截断
长文本、嵌套结构(如 dict/list)还是显示不全
display.max_colwidth 控制 object 类型列的字符串截断长度,但它对内部结构无效。比如某列存的是 JSON 字典,max_colwidth=None 只让 str(dict) 不被缩写,但不会展开嵌套层级。
-
pd.set_option('display.max_colwidth', None)解决 URL、日志等长字符串被 “...” 替代的问题 - 若列 dtype 是
object且含 list/dict,用df[col].apply(repr)查看原始结构 - 检查真实类型:
df.dtypes[col],pandas 1.3+ 推荐用stringdtype 替代模糊的object
真正麻烦的不是参数记不住,而是改完发现还是缺——大概率漏了 expand_frame_repr 或把 width 设成了 0。这些设置只影响交互式输出,导出 CSV/Excel 或调用 head() 时完全不受影响。


















