2013-04-15 8 views
9

Ich benutze pandas.read_csv, um eine whitespace-getrennte Datei zu lesen. Die Datei hat eine variable Anzahl von Leerzeichen vor jeder Zeile (die Zahlen sind rechtsbündig). Wenn ich diese Datei lese, erzeugt sie eine Spalte von NaN. Warum passiert das und was ist der beste Weg, dies zu verhindern?Pandas verwenden, um Textdatei mit führenden Leerzeichen zu lesen gibt eine NaN-Spalte

Beispiel:

Textdatei:

9.0 3.3 4.0 
32.3 44.3 5.1 
    7.2 1.1 0.9 

Befehl:

import pandas as pd 
pd.read_csv("test.txt",delim_whitespace=True,header=None) 

Ausgang:

0  1  2 3 
0 NaN 9.0 3.3 4.0 
1 NaN 32.3 44.3 5.1 
2 NaN 7.2 1.1 0.9 
+0

Es sieht aus wie jemand hat [eröffnet ein Problem auf Github] (https://github.com/pydata/pandas/issues/3374) basierend auf diesen Beitrag: – Caleb

Antwort

13

FWIW neige ich \s+ stattdessen zu verwenden, und es doesn‘ t suff fer das gleiche Problem:

>>> pd.read_csv("wspace.csv", header=None, delim_whitespace=True) 
    0  1  2 3 
0 NaN 9.0 3.3 4.0 
1 NaN 32.3 44.3 5.1 
2 NaN 7.2 1.1 0.9 
>>> pd.read_csv("wspace.csv", header=None, sep=r"\s+") 
     0  1 2 
0 9.0 3.3 4.0 
1 32.3 44.3 5.1 
2 7.2 1.1 0.9 
+0

Interessant, dass diese wäre anders (ich auch ''\ s +''), sicherlich ein Fehler? –

+1

Wir sollten nicht '' \ s + ''verwenden müssen. [Die Pandas-Tutorial-Seite] (http://pandas.pydata.org/pandas-docs/stable/io.html) sagt, dass "delim_whitespace = True" schneller sein soll. Ich werde auf andere Antworten warten, die dies erklären könnten, aber wahrscheinlich wird dies als meine Lösung markieren. – Caleb

+0

Dies ist ein ziemlich zweideutiger Fall für 'delim_whitespace'. Es ist mir nicht klar, was das richtige Verhalten ist - '\ s + '' arbeitet im Wesentlichen "zufällig" als AFAICT. –

Verwandte Themen