2014-10-09 22 views
41

Possiedo un oggetto Panda Python DataFrame contenente dati testuali. Il mio problema è che quando uso la funzione to_html(), tronca le stringhe nell'output.Pandas to_html() tronca il contenuto delle stringhe

Ad esempio:

import pandas 
df = pandas.DataFrame({'text': ['Lorem ipsum dolor sit amet, consectetur adipiscing elit.']}) 
print (df.to_html()) 

L'uscita viene troncato a adapis...

<table border="1" class="dataframe"> 
    <thead> 
    <tr style="text-align: right;"> 
     <th></th> 
     <th>text</th> 
    </tr> 
    </thead> 
    <tbody> 
    <tr> 
     <th>0</th> 
     <td> Lorem ipsum dolor sit amet, consectetur adipis...</td> 
    </tr> 
    </tbody> 
</table> 

C'è una questione connessa su SO, ma utilizza i segnaposti e ricerca/sostituzione funzionalità per postelaborare il codice HTML, che Vorrei evitare:

Esiste una soluzione più semplice a questo problema? Non sono riuscito a trovare nulla correlato allo documentation.

+0

Come stai visualizzando i contenuti, è attraverso ipython? prova questo 'pd.set_option ('display.max_colwidth', -1)' e poi stampa l'html, dovresti trovare che visualizza il testo completo, questo non ha nulla a che fare con il troncamento dei dati effettivi solo con un'impostazione di visualizzazione – EdChum

+0

@ EdChum Sì, in effetti stavo guardando l'HTML attraverso IPython, ma ho anche ottenuto gli stessi risultati in un normale terminale python. Ma sì, set_option risolve questo! Sia nel terminale che in IPython. Non sapevo prima di questa possibilità. – Timo

+0

i panda cercano di proteggerti dalle risme di output di visualizzazione che potrebbero uccidere meno ambienti python, a parte i bug oscuri che non ho mai sentito troncare i dati – EdChum

risposta

58

Quello che vedete è che i panda troncano l'output solo a scopo di visualizzazione.

Il valore predefinito max_colwidth è 50, che è quello che stai vedendo.

È possibile impostare questo valore a tutto ciò che si desidera o si può impostare a -1 che si trasforma in modo efficace questa via:

pd.set_option('display.max_colwidth', -1) 

Anche se vorrei consigliare contro questo, sarebbe meglio impostare a qualcosa che può essere visualizzato facilmente nella tua console o ipython.

un elenco delle opzioni può essere trovato qui: http://pandas.pydata.org/pandas-docs/stable/options.html

+4

'" ... "in df.to_html()' restituisce 'True'. Sembra proprio che 'pandas' stia troncando il valore di output, non solo il display. –

+0

La cura del trattamento a pioggia per spiegare? – EdChum

8

sembra che pd.set_option('display.max_colwidth', -1) è davvero l'unica opzione. Per evitare irreversibili cambiamenti globali di come dataframes sono presentati nella console, è possibile salvare l'impostazione precedente in una variabile e il ripristino subito dopo l'uso, come segue:

old_width = pd.get_option('display.max_colwidth') 
    pd.set_option('display.max_colwidth', -1) 
    open('some_file.html', 'w').write(some_data.to_html()) 
    pd.set_option('display.max_colwidth', old_width) 
+15

C'è una soluzione molto più semplice su come impostare l'opzione temporanea: 'con pd.option_context ('display.max_colwidth', -1): output_html = df.to_html()' – hynekcer

Problemi correlati