2015-12-20 8 views
14

Sto visualizzando un DataFrame di Pandas in un Notebook Jupyter e il mio DataFrame contiene stringhe di richieste di URL che possono essere centinaia di caratteri senza spazi bianchi che separano i caratteri.Pandas DataFrames: come avvolgere il testo senza spazi bianchi

Pandas sembra avvolgere solo il testo in una cella in cui non c'è spazio bianco, come mostrato nella foto allegata:

enter image description here

Se non c'è spazio bianco, la stringa viene visualizzata in una sola linea, e se non c'è abbastanza spazio le mie opzioni sono per vedere un '...' o devo impostare display.max_colwidth su un numero enorme e ora ho una tabella difficile da leggere con un sacco di scorrimento.

C'è un modo per forzare Pandas a racchiudere il testo, ad esempio ogni 100 caratteri, indipendentemente dal fatto che ci siano spazi bianchi?

+0

Dai un'occhiata a http://pandas.pydata.org/pandas-docs/stable/generated/pandas.Series.str.wrap.html, in particolare il parametro 'break_long_words'. – Shovalt

risposta

0

Se non ti interessa risolvere questo problema prima di inserire l'intero elemento in un dataframe, puoi farlo come descritto in here. Nel tuo caso particolare, se si desidera ogni riga per essere lungo 10 caratteri, si avrebbe:

# Input 
line = 'Mozilla/5.0 (Windows NT 6.3; Trident/7.0; rv:11.0; GomezAgent 3.0) 
like Gecko' 
n = 10 

# Split 
line = [line[i:i+n] for i in range(0, len(line), n)] 

# The rest is easy 
df = pd.DataFrame(line) 
print(df) 

enter image description here

senza spazi bianchi, si otterrà:

enter image description here

E, a proposito, lo spazio bianco all'inizio dell'ultima riga si verifica perché non ci sono 10 caratteri per riempire la riga come avviene nelle righe precedenti. In jupyter si potrebbe ovviare a questo utilizzando df.style.set_properties(**{'text-align': 'left'}):

enter image description here

0

È possibile creare una nuova colonna con i primi 100 caratteri dei dati

data['new_column'] = [i[:100] for i in data['old_column']] 
0

È possibile impostare

import pandas as pd 
pd.set_option('display.max_colwidth', 0) 

e ogni colonna sarà tanto grande quanto deve essere per poter visualizzare completamente è contenuto. Sarà non avvolgere il contenuto del testo delle celle (a meno che non contengano spazi).

0

È possibile utilizzare il metodo str.wrap:

df['user_agent'] = df['user_agent'].str.wrap(100) #to set max line width of 100 
1

Se siete solo in questo per ad-hoc, a scopo di visualizzazione temporanee Jupyter, si può semplicemente inserire spazi bianchi ogni 100 caratteri:

chunk_size = 100

data ['new_column'] = ['' .join ([val [0 + i: chunk_size + i] per i in range (0, len (stringa), chunk_size)] per val in data [' old_column ']

Anche se sembra che il problema sia in primo luogo dovuto al fatto che più funzionalità vengono compresse in una singola colonna.È difficile dire senza vedere il tuo set di dati più grande, ma se tutti seguono lo stesso schema, ti suggerirei di suddividerlo in più funzionalità (browser, versione del browser, sistema operativo, versione del sistema operativo, ecc.), Che renderà qualsiasi lavoro aggiuntivo con questo set di dati più facile.