重定向至stdout时Pandas DataFrame列被隐藏,如何完整输出整表?
解决Pandas宽表重定向输出时换行/列省略的问题
问题根源是Pandas会自动检测输出流是否为交互式终端(tty):
- 输出到终端时,它会读取终端实际宽度渲染表格;
- 输出被重定向或通过管道传递时,Pandas默认用80字符固定宽度,导致列被省略或强制换行。
可以通过以下几种方式解决:
方法1:全局设置终端宽度(推荐)
通过shutil获取当前终端的实际宽度,强制Pandas用该宽度渲染表格,不受输出流类型影响:
import pandas as pd import shutil # 获取终端宽度 term_width = shutil.get_terminal_size().columns # 关闭列数限制,设置显示宽度为终端宽度 pd.set_option('display.max_columns', None) pd.set_option('display.width', term_width) # 打印表格 print(your_dataframe)
方法2:手动固定显示宽度
如果终端宽度不稳定,或需要输出到文件时用固定宽度,直接指定一个足够大的数值:
import pandas as pd pd.set_option('display.max_columns', None) pd.set_option('display.width', 300) # 根据表格实际宽度调整数值 print(your_dataframe)
方法3:显式调用to_string()定制输出
无需全局修改Pandas选项,仅在打印时指定参数:
import pandas as pd import shutil term_width = shutil.get_terminal_size().columns # 用to_string指定列数和行宽 print(your_dataframe.to_string(max_cols=None, line_width=term_width))
额外说明
- 输出到文件时,可将
line_width设为一个足够大的值(比如1000),让表格在文件中以单行完整显示; - 使用
tee管道时,终端宽度依然生效,上述方法能保证表格格式与直接在终端打印一致。
内容的提问来源于stack exchange,提问作者Rich
相关产品推荐
相关产品推荐

