如何将pandas.DataFrame转为指定宽度、中间列用省略号截断的字符串
实现方案
pandas本身内置了对应格式化能力,不需要自己额外实现截断逻辑,可通过以下两种方式获取和终端打印效果完全一致的字符串:
方案1:临时调整显示配置(最简便)
pandas默认的str(df)输出就是终端打印的效果,你只需要用上下文管理器临时调整显示宽度适配你的终端即可,不会修改全局配置:
import pandas as pd def dataframe_to_terminal_str(df, terminal_width=80): with pd.option_context( "display.width", terminal_width, # 填写你的终端实际宽度 "display.max_columns", None, # 允许pandas自动判断需要截断的列数 "display.max_colwidth", 20, # 可选:单个单元格最大宽度,超出自动加省略号 "display.show_dimensions", False # 可选:是否在末尾输出行列统计信息 ): return str(df)
方案2:直接调用底层格式化类(更灵活)
如果需要完全脱离全局配置自定义格式化规则,可直接调用pandas底层的DataFrameFormatter类:
from pandas.io.formats.format import DataFrameFormatter def dataframe_to_terminal_str(df, terminal_width=80): formatter = DataFrameFormatter( df, width=terminal_width, max_columns=None, max_colwidth=20, show_dimensions=False ) return "\n".join(formatter.format())
效果说明
两种方案输出的字符串都和终端直接打印DataFrame的效果完全一致:
- 总宽度不会超过设定的终端宽度
- 超出宽度的中间列会自动用
...截断 - 不会自动换行拆分单行内容
内容的提问来源于stack exchange,提问作者eudoxos
相关产品推荐
相关产品推荐

