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.