Почему панды правильно не печатают мой DataFrame с длинными именами уровней MultiIndex? - PullRequest
1 голос
/ 09 мая 2019

У панд есть много волшебства, чтобы красиво печатать DataFrames в зависимости от размера окна терминала. К сожалению, мой, похоже, немного некалиброван, так что мне часто приходится увеличивать ширину терминала на 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)

Результат ужасен: enter image description here

Если я немного увеличу ширину, это нормально. Это то, что я хочу: подмножество столбцов, выбранных, чтобы не превышать доступную ширину. enter image description here

Но поскольку я продолжаю работать, мне приходится увеличивать ширину терминала на 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

Любые советы ??

1 Ответ

0 голосов
/ 10 мая 2019

У меня есть обходной путь, но я надеюсь, что кто-то опубликует лучший ответ.

Если я установлю:

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 столбцов.Я бы предпочел, чтобы оно было усечено с помощью «...», чтобы уместить все в одном кадре.

Тем не менее этот обходной путь, по крайней мере, дает четкие результаты.Если кто-то может опубликовать более полный ответ, я приму его.

...