2012-03-29 13 views
1

Ich benutze Pandas, um eine CSV-Datei zu lesen. Die Daten sind Zahlen, aber in der CSV-Datei als Text gespeichert. Einige der Werte sind nicht numerisch, wenn sie fehlerhaft sind oder fehlen. Wie filtere ich diese Werte heraus und konvertiere die restlichen Daten in Ganzzahlen.Lesen von CSV in Python Pandas und Umgang mit schlechten Werten

Ich gehe davon aus, dass es einen besseren/schnelleren Weg gibt, als alle Werte zu durchlaufen und isdigit() zu verwenden, um zu testen, ob sie numerisch sind.

Haben Pandas oder Numpy eine Möglichkeit, schlechte Werte im Lesegerät zu erkennen? Wenn nicht, was ist der einfachste Weg? Muss ich die dtypes spezifisch festlegen, um diese Arbeit zu machen?

Antwort

3

pandas.read_csv hat den Parameter na_values:

na_values : list-like, default None 
    List of additional strings to recognize as NA/NaN 

, wo Sie diese schlechten Werte definieren können.

+0

Großartig. Das scheint genau das zu sein, wonach ich gesucht habe. – Dave31415

+0

Gibt es eine Möglichkeit, na_values ​​zu verwenden, wenn die Zeichenfolge spaltenabhängig ist? Zum Beispiel habe ich einige Spalten, in denen negative Werte schlecht sind, aber andere, wo sie in Ordnung sind. – Shawn

+1

Nein @Shawn. Im Idealfall können Sie nicht na_values ​​für jede Spalte anders durchführen. Die Verarbeitung negativer Werte sollte während der Datenvorverarbeitung/-reinigung erfolgen – JKC

1

NumPy bietet die Funktion genfromtxt() speziell für diesen Zweck. Der erste Satz aus der verknüpften Dokumentation:

Laden Sie Daten aus einer Textdatei, wobei die fehlenden Werte wie angegeben behandelt werden.

+0

Ok, danke. Ich dachte, Pandas sollte ein Add-On auf höherer Ebene sein. Ich habe diese Funktionalität dort erwartet. Also einfach das verwenden und in einen Datenrahmen umwandeln? – Dave31415

+0

@ Dave31415: Ich weiß nicht genau, wie Ihre Daten aussehen, aber das ist der Ansatz, den ich zuerst versuchen würde. –

+0

Wenn 'pandas.read_csv' nicht das tut, was Sie brauchen, erstellen Sie ein Problem auf GitHub: http://github.com/pydata/pandas/issues –

3

Sie können eine benutzerdefinierte Liste von Werten übergeben, die als fehlend behandelt werden sollen, indem Sie pandas.read_csv verwenden. Alternativ können Sie Funktionen an das Argument converters übergeben.