Pandas to_html () schneidet den Inhalt von Zeichenfolgen ab


81

Ich habe ein Python Pandas- DataFrameObjekt, das Textdaten enthält. Mein Problem ist, dass bei Verwendung der to_html()Funktion die Zeichenfolgen in der Ausgabe abgeschnitten werden.

Zum Beispiel:

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

Die Ausgabe wird bei abgeschnitten 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>

Es gibt eine verwandte Frage zu SO, aber es verwendet Platzhalter und Such- / Ersetzungsfunktionen, um den HTML-Code nachzubearbeiten, was ich vermeiden möchte:

Gibt es eine einfachere Lösung für dieses Problem? Ich konnte nichts in der Dokumentation finden .


2
Wie sehen Sie den Inhalt über iPython? Versuchen Sie dies pd.set_option('display.max_colwidth', -1)und drucken Sie dann das HTML aus. Sie sollten feststellen, dass es den vollständigen Text anzeigt. Dies hat nichts mit dem Abschneiden der tatsächlichen Daten zu tun,
sondern

@EdChum Ja, ich habe mir zwar den HTML-Code über IPython angesehen, aber auch im normalen Python-Terminal die gleichen Ergebnisse erzielt. Aber ja, set_option behebt das! Sowohl im Terminal als auch in IPython. Wusste vorher nichts von dieser Möglichkeit.
Timo

pandas versucht, Sie vor Unmengen von Ausgaben zu schützen, die möglicherweise weniger Python-Umgebungen
zerstören

Antworten:


107

Was Sie sehen, sind Pandas, die die Ausgabe nur zu Anzeigezwecken abschneiden.

Der Standardwert max_colwidthist 50, was Sie sehen.

Sie können diesen Wert auf einen beliebigen Wert einstellen oder auf -1, wodurch dies effektiv deaktiviert wird:

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

Obwohl ich davon abraten würde, wäre es besser, es auf etwas zu setzen, das einfach in Ihrer Konsole oder Ipython angezeigt werden kann.

Eine Liste der Optionen finden Sie hier: http://pandas.pydata.org/pandas-docs/stable/options.html


8
`" ... "in df.to_html ()` wird ausgewertet True. Es scheint, pandasals würde der Ausgabewert abgeschnitten, nicht nur die Anzeige.
Chris Chudzicki

Ich habe einen sehr merkwürdigen Fall, den ich in dieser Frage beschreibe: stackoverflow.com/questions/51260756/… wo ein Zellenwert in einer HTML-Tabelle ein Wörterbuch enthält. Die Wörterbücher, die nicht so groß sind wie dieses, werden in anderen Tabellen in Ordnung gezeigt, aber dieses sehr lange Wörterbuch wird durch Punkte abgekürzt und ich kann es nicht anzeigen lassen. Ich habe mit pd.set_option ('display.max_rows', 1000) experimentiert, kein Glück. Irgendwelche Vorschläge dazu oder sogar eine Antwort auf meine Frage?
user637338

Ist dies in Version 0.24 immer noch der richtige Weg?
Jason Strimpel

@ JasonStrimpel ja ich glaube schon
EdChum

1
@ Superdooperhero können Sie nicht, die Anzeigeoptionen wirken sich auf alle Spalten oder Zeilen aus
EdChum

19

es scheint, dass dies pd.set_option('display.max_colwidth', -1)in der Tat die einzige Option ist. Um irreversible globale Änderungen der Darstellung von Datenrahmen in der Konsole zu vermeiden, können Sie die vorherige Einstellung in einer Variablen speichern und unmittelbar nach der Verwendung wie folgt wiederherstellen:

    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)

45
Es gibt eine viel einfachere Lösung, wie man eine temporäre Option with pd.option_context('display.max_colwidth', -1): output_html = df.to_html()
festlegt
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.