pandas具有很多魔术,可以根据终端窗口的大小漂亮地打印DataFrame。不幸的是,我的校准似乎略有错误,因此我通常必须将端子宽度扩大1-2个字符才能使其适应要求。好像是一直在低估MultiIndex的宽度,还是在高估终端窗口的宽度。
据我所知,问题发生在以下时间:
列太多,无法一次显示在屏幕上,并且
索引是一个MultiIndex,其中包含多个具有长名称的级别。
这是一个示例脚本:
import pandas
import numpy as np
df = pandas.DataFrame(np.zeros((9, 16), dtype=np.int))
df.index = pandas.MultiIndex.from_product([
['awefawef', 'asdaoijo', 'awefoiasdfasji'],
['awefawef', 'asdoaijo', 'awefoiji', ],
])
print(df)
如果我稍微增加宽度,那很好。这就是我想要的:列的子集,选择不超过可用宽度。
但是当我继续工作时,我必须每隔几分钟将终端宽度增加1-2个字符,这令人沮丧。因此,它检测到我正在增加端子宽度,但是它仍然倾向于使输出略宽。
我目前已设置了这些选项。从文档上看,这些对我来说都是正确的。
In [4]: pandas.get_option('display.width')
Out[4]: 80
In [5]: pandas.get_option('display.expand_frame_repr')
Out[5]: True
In [12]: pandas.get_option('display.pprint_nest_depth')
Out[12]: 3
任何提示?
答案 0 :(得分:0)
我有一种解决方法,但我希望有人能提供更好的答案。
如果我设置了
pandas.set_option('display.max_columns', 12)
pandas.set_option('display.width', None)
然后正确格式化输出的端子宽度。
0 1 2 3 4 5 ... 10 11 \
awefawef awefawef 0 0 0 0 0 0 ... 0 0
asdoaijo 0 0 0 0 0 0 ... 0 0
awefoiji 0 0 0 0 0 0 ... 0 0
asdaoijo awefawef 0 0 0 0 0 0 ... 0 0
asdoaijo 0 0 0 0 0 0 ... 0 0
awefoiji 0 0 0 0 0 0 ... 0 0
awefoiasdfasji awefawef 0 0 0 0 0 0 ... 0 0
asdoaijo 0 0 0 0 0 0 ... 0 0
awefoiji 0 0 0 0 0 0 ... 0 0
12 13 14 15
awefawef awefawef 0 0 0 0
asdoaijo 0 0 0 0
awefoiji 0 0 0 0
asdaoijo awefawef 0 0 0 0
asdoaijo 0 0 0 0
awefoiji 0 0 0 0
awefoiasdfasji awefawef 0 0 0 0
asdoaijo 0 0 0 0
awefoiji 0 0 0 0
[9 rows x 16 columns]
有两个缺点:
尽管如此,这种解决方法至少可以产生清晰的结果。如果有人可以发布更完整的答案,我会接受。