如何在PyQt QtPlainTextEdit中显示print(df)的DataFrame摘要
问题描述
需要在PyQt的QPlainTextEdit控件中展示print(df)的输出效果,即首尾展示部分行/列数据、中间用省略号标识截断的DataFrame预览,示例效果如下:
date symbol open ... low high volume 0 2016-01-05 WLTW 123.430000 ... 122.309998 126.250000 2163600.0 1 2016-01-06 WLTW 125.239998 ... 119.940002 125.540001 2386400.0 2 2016-01-07 WLTW 116.379997 ... 114.930000 119.739998 2489500.0 3 2016-01-08 WLTW 115.480003 ... 113.500000 117.440002 2006300.0 4 2016-01-11 WLTW 117.010002 ... 114.089996 117.330002 1408600.0 ... ... ... ... ... ... ... ... 851259 2016-12-30 ZBH 103.309998 ... 102.849998 103.930000 973800.0 851260 2016-12-30 ZION 43.070000 ... 42.689999 43.310001 1938100.0 851261 2016-12-30 ZTS 53.639999 ... 53.270000 53.740002 1701200.0 851262 2016-12-30 AIV 44.730000 ... 44.410000 45.590000 1380900.0 851263 2016-12-30 FTV 54.200001 ... 53.389999 54.480000 705100.0
已尝试的实现代码如下:
self.data_overview.insertPlainText(df.to_string())
该写法会输出完整全量数据集,无法得到print(df)生成的带截断的缩略摘要,需要简便方法获取对应摘要文本用于控件展示。
解决方法
直接调用repr(df)即可获取和控制台print(df)完全一致的截断预览字符串,替换原有代码即可:
self.data_overview.insertPlainText(repr(df))
如果需要自定义截断规则,比如调整首尾展示的行数、展示列数、单行显示宽度,可以临时修改pandas显示配置,配置仅在上下文块内生效,不会影响全局pandas的输出行为:
import pandas as pd # 可根据控件实际尺寸调整参数 with pd.option_context( 'display.max_rows', 10, # 截断后总共展示的行数 'display.max_columns', 6, # 截断后总共展示的列数 'display.width', 120 # 单行文本最大字符宽度 ): preview_text = repr(df) self.data_overview.insertPlainText(preview_text)
原理说明:df.to_string()默认会绕过pandas的截断显示配置,强制输出全量数据集;而print(df)的输出本质就是repr(df)的返回值,会自动遵循pandas的截断规则,和控制台打印效果完全匹配。
内容的提问来源于stack exchange,提问作者Carl Nirediew
相关产品推荐
相关产品推荐

