Pandas 为什么';是否使用长的多索引级别名称打印我的数据帧?
熊猫有很多魔力,可以根据终端窗口的大小漂亮地打印数据帧。不幸的是,我的似乎有点校准错误,因此我经常不得不将终端宽度扩展1-2个字符,以使其适合。这就好像它一直低估了多重索引的宽度,或者高估了终端窗口的宽度 据我所知,问题发生在:Pandas 为什么';是否使用长的多索引级别名称打印我的数据帧?,pandas,terminal,pretty-print,Pandas,Terminal,Pretty Print,熊猫有很多魔力,可以根据终端窗口的大小漂亮地打印数据帧。不幸的是,我的似乎有点校准错误,因此我经常不得不将终端宽度扩展1-2个字符,以使其适合。这就好像它一直低估了多重索引的宽度,或者高估了终端窗口的宽度 据我所知,问题发生在: 屏幕上的列太多,无法同时显示,并且 索引是一个包含多个具有长名称的级别的多索引 下面是一个示例脚本: import pandas import numpy as np df = pandas.DataFrame(np.zeros((9, 16), dtype=np
- 屏幕上的列太多,无法同时显示,并且
- 索引是一个包含多个具有长名称的级别的多索引
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
有什么建议吗?我有一个解决办法,但我希望有人能给出更好的答案 如果我设置:
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]
有两个缺点:
- 我宁愿根据每列的宽度选择列数,而不是硬编码为12
- 这会将输出溢出到多个“帧”上,以获得12列。我宁愿用一个“…”来截断它,以便在一个帧中容纳所有内容
尽管如此,这种解决方法至少可以产生清晰的结果。如果有人能给出更完整的答案,我会接受。我有一个解决办法,但我希望有人能给出更好的答案 如果我设置:
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]
有两个缺点:
- 我宁愿根据每列的宽度选择列数,而不是硬编码为12
- 这会将输出溢出到多个“帧”上,以获得12列。我宁愿用一个“…”来截断它,以便在一个帧中容纳所有内容
display(df)
?@ALollzprint(df)
和display(df)
产生相同的结果print(df.to_string())
在不删除任何列的情况下打印输出,因此它非常宽。print(df.to_string())
帮助吗?或者display(df)
?@ALollzprint(df)
和display(df)
产生相同的结果print(df.to_string())
在不删除任何列的情况下打印输出,因此它非常宽。