Stampa una stringa molto lunga completamente in pandas dataframe


116

Sto lottando con la cosa apparentemente molto semplice: ho un data frame panda contenente una stringa molto lunga.

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

Ora, quando provo a stampare lo stesso, non vedo l'intera stringa, piuttosto vedo solo una parte della stringa.

Ho provato le seguenti opzioni

  • utilizzando print(df.iloc[2])
  • utilizzando to_html
  • utilizzando to_string
  • Una delle risposte di stackoverflow ha suggerito di aumentare la larghezza della colonna utilizzando l'opzione di visualizzazione dei panda, che non ha funzionato neanche.
  • Inoltre non ho set_printoptionscapito come mi aiuterà.

Tutte le idee apprezzate. Sembra molto semplice, ma non in grado di ottenerlo!

Risposte:


176

È possibile utilizzare options.display.max_colwidthper specificare che si desidera visualizzare di più nella rappresentazione predefinita:

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

E infatti, se vuoi solo ispezionare l'unico valore, accedendovi (come uno scalare, non come una riga come df.iloc[2]fa) vedi anche la stringa completa:

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] - non funziona - stamperò la prima e la terza riga e
taglierò

Funziona, se vuoi l'elemento della terza riga e della prima colonna. Se vuoi qualcos'altro, apri una nuova domanda.
joris

Funziona, grazie! Ho un elenco di codici postali in 1 colonna e utilizzo apply per trovare la colonna minima e massima utilizzando una funzione: df ['zipcodeMinMax'] = df.loc [:, ['zipcodeList']]. Apply (createMinMaxZipcode, axis = 1). Quindi all'interno della funzione faccio to_string sulla serie (stringZipcodes = zipcodeList.to_string (header = False, index = False)). Gli elenchi più lunghi di codici postali risultavano in 3 punti alla fine, ad esempio "1111 ...". Infatti questo non accade se si selezionano i valori in base all'indice e alla colonna (come uno scalare). La mia domanda: perché questo comportamento? L'impostazione delle opzioni di visualizzazione per influenzare l'applicazione mi sembra strano? Grazie!
Wouter

1
@Wouter se hai una domanda diversa, meglio farne una nuova invece di commentare qui
joris

1
Questo non funziona per una stringa più grande come un paragrafo con più righe.
devssh

37

Utilizzare pd.set_option('display.max_colwidth', -1)per interruzioni di riga automatiche e celle multilinea.

Questa è un'ottima risorsa su come utilizzare al meglio la visualizzazione di jupyters con i panda.


6
pd.set_option('display.max_colwidth', None)per le versioni più recenti
cookiemonster

Questa è la risposta migliore
clancy il

17

Un altro approccio piuttosto semplice è chiamare la funzione elenco:

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

Non vale la pena menzionarlo, che non è bene che il convento elenchi tutte le colonne, ma per una semplice riga - perché no


1
Se hai ridotto il tuo df in base ad alcuni criteri di ricerca, ed è ridotto a una singola riga, questo non funziona. È il modo più semplice, per le esigenze di debug comunque, e vorrei che funzionasse, ma non so perché non lo fa. Ottieni un "*** KeyError: 0". Immagino che abbia a che fare con l'essere come uno "scalare" quando c'è un solo valore.
Starman

Ad oggi, questo restituisce tutti i caratteri con una query nel df che restituisce due celle con 127 caratteri, che sono stato frustrato nel tentativo di ottenere. Se questo aiuta qualcuno
avirr

12

Un altro modo più semplice per stampare l'intera stringa è chiamare valuesil dataframe.

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

print(df.values)

L'output sarà

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

4

È questo quello che intendevi fare?

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'

4

Basta aggiungere la seguente riga al codice prima della stampa.

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

Puoi semplicemente eseguire i seguenti passaggi per impostare altre opzioni aggiuntive,

  • È possibile modificare le opzioni per la funzione max_columns di panda come segue per visualizzare più colonne

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

    (questo consente di visualizzare 10 colonne, puoi modificarlo in base alle tue esigenze)

  • In questo modo puoi modificare il numero di righe che devi visualizzare come segue per visualizzare più righe

    pd.options.display.max_rows = 999

    (questo permette di stampare 999 righe alla volta)

questo dovrebbe funzionare bene

Si prega gentilmente di fare riferimento al documento per modificare più opzioni / impostazioni per i panda


3

Il modo in cui spesso gestisco la situazione che descrivi è usare il .to_csv()metodo e scrivere su stdout:

import sys

df.to_csv(sys.stdout)

Aggiornamento: ora dovrebbe essere possibile utilizzare solo Noneanziché sys.stdoutcon effetto simile!

Questo dovrebbe eseguire il dump dell'intero dataframe, inclusa la totalità di eventuali stringhe. È possibile utilizzare i parametri to_csv per configurare i separatori di colonna, se l'indice viene stampato, ecc. Tuttavia, sarà meno carino che renderlo correttamente.

L'ho pubblicato originariamente in risposta alla domanda in qualche modo correlata a Dati di output da tutte le colonne in un dataframe in panda


2

Ho creato una piccola funzione di utilità, questo funziona bene per me

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)

Posso modificare la lunghezza della larghezza secondo le mie esigenze, senza impostare alcuna opzione in modo permanente.


1

Se stai usando jupyter notebook, puoi anche stampare il dataframe dei panda come tabella HTML, che stamperà le stringhe complete.

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

Produzione

    one
0   one
1   two
2   This is very long string very long string very long string veryvery long string
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.