2017-03-29 55 views
6

Mam długie tytuły dla niektórych kolumn w mojej ramce danych i chciałbym móc zawinąć tekst. Wiem, że ta funkcja jest wbudowana w pand, jak ja:Nazwy kolumn zawijanych w Python Pandas DataFrame lub Jupyter Notebooks

pd.DataFrame(np.random.randn(2, 10), 
    columns=['Very Long Column Title ' + str(i) for i in range(10)]) 

DataFrame with wrapped column names

Ale jeśli mam mniej kolumn, tytuły nie będą zawijać:

pd.DataFrame(np.random.randn(10, 2), 
    columns=['Very Long Column Title ' + str(i) for i in range(2)]) 

DataFrame does not wrap column names

Próbowałem również ręcznie wstawić znak nowej linii:

import pandas as pd  
pd.DataFrame(np.random.randn(10, 2), 
    columns=['Very Long \n Column Title ' + str(i) for i in range(2)]) 

Ale to daje takie samo wyjście jak powyżej.

Znalazłem podobny do odpowiedzi na ten temat:

Pracuję w notatniku Jupyter, ale wolałbym pandy-ba rozwiązanie sed, jeśli to możliwe.

Odpowiedz

3

Oto odpowiedź, która nie pociąga za sobą zmianę właściwości ipython:

df = pd.DataFrame(np.random.randn(10, 2), 
    columns=['Very Long Column Title ' + str(i) for i in range(2)]) 
df.style.set_table_styles([dict(selector="th",props=[('max-width', '50px')])]) 
+1

Dzięki! Rodzimy wynik pandy, na co miałem nadzieję. – Rachel

5

Notebooki Jupyter dziedziczą swoje właściwości wyświetlania z wielu źródeł. W pandas nie ma żadnej właściwości, która ogranicza szerokość nagłówków kolumn, ponieważ nie jest tym, co powoduje zawijanie tekstu, lecz jest renderowanym kodem HTML.

Można nadpisać domyślne Jupyter style notebooki ograniczyć maksymalną szerokość nagłówkach tabeli przy użyciu:

from IPython.core.display import HTML 
HTML("<style>.rendered_html th {max-width: 120px;}</style>") 

uruchomić ten kod raz w górnej części komputera przenośnego, aby ustawić max Szerokość kolumny nagłówków tabeli HTML do 120 pikseli.

+0

Idealnie! Wiedziałem, że to musi być gdzieś, ale nie mogłem się zorientować, gdzie. – Rachel

0

można „włamać się” właściwego zachowania wstawiając spacje w nagłówkach kolumn z:

def colfix(df, L=5): return df.rename(columns=lambda x: ' '.join(x.replace('_', ' ')[i:i+L] for i in range(0,len(x),L)) if df[x].dtype in ['float64','int64'] else x) 

colfix(your_df) 

zobaczyć moje odpowiedź na podobne pytanie https://stackoverflow.com/a/45078833/6903458