Pandas 为什么';是否使用长的多索引级别名称打印我的数据帧?

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

熊猫有很多魔力,可以根据终端窗口的大小漂亮地打印数据帧。不幸的是,我的似乎有点校准错误,因此我经常不得不将终端宽度扩展1-2个字符,以使其适合。这就好像它一直低估了多重索引的宽度,或者高估了终端窗口的宽度

据我所知,问题发生在:

  • 屏幕上的列太多,无法同时显示,并且

  • 索引是一个包含多个具有长名称的级别的多索引

下面是一个示例脚本:

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列。我宁愿用一个“…”来截断它,以便在一个帧中容纳所有内容
尽管如此,这种解决方法至少可以产生清晰的结果。如果有人能给出更完整的答案,我会接受。

是否打印(df.to_string())帮助?或者
display(df)
?@ALollz
print(df)
display(df)
产生相同的结果
print(df.to_string())
在不删除任何列的情况下打印输出,因此它非常宽。
print(df.to_string())
帮助吗?或者
display(df)
?@ALollz
print(df)
display(df)
产生相同的结果
print(df.to_string())
在不删除任何列的情况下打印输出,因此它非常宽。