2015-12-20 9 views
14

Ich sehe einen Pandas DataFrame in einem Jupyter Notebook, und mein DataFrame enthält URL-Anforderungszeichenfolgen, die Hunderte von Zeichen ohne Leerzeichen, die Zeichen trennen können, sein kann.Pandas DataFrames: Wie man Text ohne Whitespace umschließt

Pandas scheint nur Text in einer Zelle zu wickeln, wenn es Leerzeichen ist, wie auf der beigefügten Abbildung dargestellt:

enter image description here

Wenn es keine Leerzeichen ist, wird die Zeichenfolge in einer einzigen Zeile angezeigt wird, und Wenn nicht genug Platz ist, sehe ich entweder ein '...' oder ich setze display.max_colwidth auf eine riesige Zahl und habe jetzt eine schwer lesbare Tabelle mit vielen Scrolls.

Gibt es eine Möglichkeit, Pandas zu zwingen, Text zu schreiben, sagen wir, alle 100 Zeichen, unabhängig davon, ob es Leerzeichen gibt?

+0

Werfen Sie einen Blick auf http://pandas.pydata.org/pandas-docs/stable/generated/pandas.Series.str.wrap.html, speziell den Parameter 'break_long_words'. – Shovalt

Antwort

0

Wenn es Ihnen nichts ausmacht, dies zu lösen, bevor Sie das Ganze in einen Datenrahmen einfügen, können Sie es wie beschrieben here beschrieben. In Ihrem speziellen Fall, wenn Sie jede Zeile möchten 10 Zeichen lang sein, würden Sie haben:

# 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

Ohne die weißen Flächen, erhalten Sie:

enter image description here

Und übrigens, der Leerraum am Anfang der letzten Zeile tritt auf, weil es nicht 10 Zeichen gibt, um die Zeile wie in den vorhergehenden Zeilen zu füllen. In jupyter könnten Sie dies beheben, indem Sie df.style.set_properties(**{'text-align': 'left'}):

enter image description here

0

Sie eine neue Spalte mit den ersten 100 Zeichen der Daten kann

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

erstellen Sie setzen

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

und dann wird jede Spalte genauso groß wie es sein muss, um vollständig anzuzeigen Sein Inhalt. Es wird nicht den Text Inhalt der Zellen obwohl wickeln (sofern sie Leerzeichen enthalten).

0

Sie können str.wrap Methode verwenden:

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

Wenn Sie nur in dieser sind für Ad-hoc, temporäre Anzeigezwecken in Jupyter, können Sie einfach einfügen Leerzeichen alle 100 Zeichen:

chunk_size = 100

Daten ['neue_Spalte'] = ['' .join ([val [0 + i: chunk_size + i] für i im Bereich (0, len (string), chunk_size)] für val in Daten [' alte_Säule ']

Obwohl es zunächst so aussieht, dass dies ein Problem ist, weil mehrere Features in einer einzigen Spalte zusammengefasst sind.Es ist schwer zu sagen, ohne Ihren größeren Datensatz zu sehen, aber wenn sie alle demselben Muster folgen, empfehle ich dringend, dies in mehrere Funktionen aufzuteilen (Browser, Browserversion, Betriebssystem, Betriebssystemversion usw.), die zusätzliche Arbeit leisten mit diesem Datensatz einfacher.

Verwandte Themen