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 .

Timo
quelle
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

EdChum
quelle
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)
Boris Gorelik
quelle
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