Drucken Sie sehr lange Zeichenfolgen vollständig im Pandas-Datenrahmen


116

Ich kämpfe mit der scheinbar sehr einfachen Sache. Ich habe einen Pandas-Datenrahmen, der eine sehr lange Zeichenfolge enthält.

df = pd.DataFrame({'one' : ['one', 'two', 
      'This is very long string very long string very long string veryvery long string']})

Wenn ich jetzt versuche, dasselbe zu drucken, sehe ich nicht die vollständige Zeichenfolge, sondern nur einen Teil der Zeichenfolge.

Ich habe versucht, folgende Optionen zu verwenden

  • mit print(df.iloc[2])
  • mit to_html
  • mit to_string
  • In einer der Antworten zum Stapelüberlauf wurde vorgeschlagen, die Spaltenbreite mithilfe der Pandas-Anzeigeoption zu erhöhen, was ebenfalls nicht funktionierte.
  • Ich habe auch nicht verstanden, wie set_printoptionsmir helfen wird.

Irgendwelche Ideen geschätzt. Sieht sehr einfach aus, kann es aber nicht bekommen!

Antworten:


175

Sie können verwenden, options.display.max_colwidthum anzugeben, dass in der Standarddarstellung mehr angezeigt werden soll:

In [2]: df
Out[2]:
                                                 one
0                                                one
1                                                two
2  This is very long string very long string very...

In [3]: pd.options.display.max_colwidth
Out[3]: 50

In [4]: pd.options.display.max_colwidth = 100

In [5]: df
Out[5]:
                                                                               one
0                                                                              one
1                                                                              two
2  This is very long string very long string very long string veryvery long string

Wenn Sie nur den einen Wert untersuchen möchten, sehen Sie durch den Zugriff darauf (als Skalar, nicht als Zeile, wie dies der df.iloc[2]Fall ist) auch die vollständige Zeichenfolge:

In [7]: df.iloc[2,0]    # or df.loc[2,'one']
Out[7]: 'This is very long string very long string very long string veryvery long string'

2
df.iloc [2,0] - funktioniert nicht - Ich werde erste und dritte Reihe drucken und
schneiden

Es funktioniert, wenn Sie ein Element der dritten Zeile und der ersten Spalte möchten. Wenn Sie etwas anderes wollen, öffnen Sie bitte eine neue Frage.
Joris

Es funktioniert, danke! Ich habe eine Liste mit Postleitzahlen in einer Spalte und verwende apply, um die minimale und maximale Spalte mithilfe einer Funktion zu ermitteln: df ['zipcodeMinMax'] = df.loc [:, ['zipcodeList']]. Apply (createMinMaxZipcode, axis = 1). Also mache ich innerhalb der Funktion to_string für die Serie (stringZipcodes = zipcodeList.to_string (header = False, index = False)). Die längeren Listen mit Postleitzahlen führten zu 3 Punkten am Ende, z. B. "1111 ...". Dies ist in der Tat nicht der Fall, wenn Sie die Werte basierend auf Index und Spalte (als Skalar) auswählen. Meine Frage: Warum dieses Verhalten? Das Einstellen der Anzeigeoptionen zur Beeinflussung der Anwendung erscheint mir seltsam? Vielen Dank!
Wouter

1
@Wouter, wenn Sie eine andere Frage haben, stellen Sie besser eine neue, anstatt hier zu kommentieren
joris

1
Dies funktioniert nicht für eine größere Zeichenfolge wie einen Absatz mit mehreren Zeilen.
Devssh

37

Verwendung pd.set_option('display.max_colwidth', -1)für automatische Zeilenumbrüche und mehrzeilige Zellen.

Dies ist eine großartige Ressource, um das Jupyters-Display mit Pandas in vollen Zügen zu nutzen.


6
pd.set_option('display.max_colwidth', None)für neuere Versionen
cookiemonster

Dies ist die beste Antwort
Clancy

17

Ein anderer, ziemlich einfacher Ansatz ist das Aufrufen der Listenfunktion:

list(df['one'][2])
# output:
['This is very long string very long string very long string veryvery long string']

Keine Erwähnung wert, das ist nicht gut, um die ganzen Spalten aufzulisten, aber für eine einfache Zeile - warum nicht


1
Wenn Sie Ihre df anhand einiger Suchkriterien heruntergeschnitten haben und es sich nur um eine einzelne Zeile handelt, funktioniert dies nicht. Es ist der einfachste Weg, um Debugging-Anforderungen zu erfüllen, und ich wünschte, es würde funktionieren, aber ich weiß nicht, warum dies nicht der Fall ist. Sie erhalten einen "*** KeyError: 0". Ich vermute, es hat damit zu tun, wie ein "Skalar" zu sein, wenn es nur einen Wert gibt.
Starman

Ab heute werden alle Zeichen mit einer Abfrage in der df zurückgegeben, die zwei Zellen mit 127 Zeichen zurückgibt, die ich frustriert versucht habe, zu erreichen. Wenn das jemandem hilft
avirr

12

Eine andere einfachere Möglichkeit, die gesamte Zeichenfolge zu drucken, besteht darin, valuesden Datenrahmen aufzurufen.

df = pd.DataFrame({'one' : ['one', 'two', 
      'This is very long string very long string very long string veryvery long string']})

print(df.values)

Die Ausgabe wird sein

[['one']
 ['two']
 ['This is very long string very long string very long string veryvery long string']]

4

Wolltest du das tun?

In [7]: x =  pd.DataFrame({'one' : ['one', 'two', 'This is very long string very long string very long string veryvery long string']})

In [8]: x
Out[8]: 
                                                 one
0                                                one
1                                                two
2  This is very long string very long string very...

In [9]: x['one'][2]
Out[9]: 'This is very long string very long string very long string veryvery long string'

3

Ich gehe oft mit der von Ihnen beschriebenen Situation .to_csv()um, indem ich die Methode verwende und an stdout schreibe:

import sys

df.to_csv(sys.stdout)

Update: Es soll nun möglich sein , nur nutzen , Noneanstatt sys.stdoutmit ähnlicher Wirkung!

Dies sollte den gesamten Datenrahmen einschließlich der Gesamtheit aller Zeichenfolgen sichern. Mit den Parametern to_csv können Sie Spaltentrennzeichen konfigurieren, unabhängig davon, ob der Index gedruckt wird usw. Es ist jedoch weniger hübsch als das ordnungsgemäße Rendern.

Ich habe dies ursprünglich als Antwort auf die etwas verwandte Frage unter Daten aus allen Spalten in einem Datenrahmen in Pandas ausgeben gepostet


3

Fügen Sie Ihrem Code vor dem Drucken einfach die folgende Zeile hinzu.

 pd.options.display.max_colwidth = 90  # set a value as your need

Sie können einfach die folgenden Schritte ausführen, um andere zusätzliche Optionen festzulegen:

  • Sie können die Optionen für die Funktion pandas max_columns wie folgt ändern, um weitere Spalten anzuzeigen

    import pandas as pd
    pd.options.display.max_columns = 10

    (Dadurch können 10 Spalten angezeigt werden. Sie können dies nach Bedarf ändern.)

  • Auf diese Weise können Sie die Anzahl der Zeilen wie folgt ändern, um weitere Zeilen anzuzeigen

    pd.options.display.max_rows = 999

    (Dies ermöglicht das Drucken von 999 Zeilen gleichzeitig)

das sollte gut funktionieren

Bitte beziehen Sie sich auf das Dokument , um weitere Optionen / Einstellungen für Pandas zu ändern


2

Ich habe eine kleine Utility-Funktion erstellt, die für mich gut funktioniert

def display_text_max_col_width(df, width):
    with pd.option_context('display.max_colwidth', width):
        print(df)

display_text_max_col_width(train_df["Description"], 800)

Ich kann die Länge der Breite gemäß meinen Anforderungen ändern, ohne eine Option dauerhaft festzulegen.


1

Wenn Sie ein Jupiter-Notizbuch verwenden, können Sie den Pandas-Datenrahmen auch als HTML-Tabelle drucken, wodurch vollständige Zeichenfolgen gedruckt werden.

from IPython.display import display, HTML
display(HTML(df.to_html()))

Ausgabe

    one
0   one
1   two
2   This is very long string very long string very long string veryvery long string
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.