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!

Yantraguru
quelle

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'
Joris
quelle
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.

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

Rocketq
quelle
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']]
Bigbounty
quelle
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'
fixxxer
quelle
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

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

Amila Viraj
quelle
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.

Sachin Rastogi
quelle
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
kHarshit
quelle