2013-03-25 10 views
7

Z reguły lubię używać długich, opisowych nazw kolumn (np. estimated_background_signal, a nie tylko bg) dla obiektów DataFrame. Jedną wadą tej preferencji jest to, że forma wyświetlania DataFrame ma kilka kolumn, które są znacznie szersze niż wymagają tego ich wartości. Na przykład:Jak dostosować nagłówki i szerokości kolumn w oknie DataFrame?

In [10]: data.head() 
    barcode estimated_background_signal inhibitor_code inhibitor_concentration 
0 R00577279       133   IRB     0.001 
1 R00577279       189   SNZ     0.001 
2 R00577279       101   CMY     0.001 
3 R00577279       112   BRC     0.001 
4 R00577279       244   ISB     0.001 

Byłoby miło, gdyby wyświetlacz był węższy. Pomijając nagłówki, najwęższy wyświetlacz będzie:

0 R00577279 113 IRB 0.001 
1 R00577279 189 SNZ 0.001 
2 R00577279 101 CMY 0.001 
3 R00577279 112 BRC 0.001 
4 R00577279 244 ISB 0.001 

... ale wyeliminowanie nagłówki w ogóle nie jest w pełni satysfakcjonujące rozwiązanie. Lepszy jeden byłoby zrobić wyświetlacz wystarczająco szerokie, aby umożliwić niektórych nagłówków, ewentualnie objęciem kilka linii:

barcode estim inhib inhib 
      ated_ itor_ itor_ 
      backg code conce 
0 R00577279 113 IRB 0.001 
1 R00577279 189 SNZ 0.001 
2 R00577279 101 CMY 0.001 
3 R00577279 112 BRC 0.001 
4 R00577279 244 ISB 0.001 

To chyba oczywiste, że żadna konwencja byłaby odpowiednia dla wszystkich sytuacjach, ale w każdym przypadku, czy pandas oferuje jakikolwiek sposób dostosowania nagłówków i szerokości kolumn do formularza wyświetlania ?

+0

wierzę 'pandy. set_option ('max_colwidth', [desired-max]) 'powinno spełnić twoje n ale wydaje się, że teraz nie działa. Zobacz [to pytanie] (https://stackoverflow.com/questions/45883201/how-to-limit-width-of-column-headers-in-pandas), aby uzyskać więcej informacji. –

Odpowiedz

0

To trochę hack, który używa funkcji wielu indeksów pand w niestandardowy sposób, chociaż nie widzę żadnych poważniejszych problemów z tym. Oczywiście, istnieje pewna zwiększona złożoność wynikająca z używania wielu wskaźników zamiast prostego indeksu.

cols = df.columns 
lencols = [ int(len(c)/2) for c in cols ] 

df.columns = pd.MultiIndex.from_tuples( 
       tuple((c[:ln], c[ln:]) for c, ln in zip(cols, lencols))) 

Wyniki:

  bar estimated_bac inhibit inhibitor_c 
     code kground_signal or_code oncentration 
0 R00577279   133  IRB  0.001 
1 R00577279   189  SNZ  0.001 
2 R00577279   101  CMY  0.001 
3 R00577279   112  BRC  0.001 
4 R00577279   244  ISB  0.001 

Można także rozważyć utworzenie słownika do konwersji między długimi & krótkich nazw, ile potrzeba:

Powiązane problemy