2017-10-06 6 views
1

Suchen, um die Daten in einer CSV-Datei mit Python und Pandas zu überprüfen. Alles funktioniert gut, wenn saubere Daten eingegeben werden. Wenn es jedoch ein Problem mit den Daten gibt, sind die Probleme schwer zu finden. Jede Art von Fehler zu erheben wäre großartig. Hier einig Pseudo-Code:Wie validiere ich csv Daten gelesen von pandas.read_csv?

dtypes = {'Date': 'str', 'yesno': 'str', 'int_val': 'int', 'decimal_value': 'str'} 
df = pd.read_csv(filename, dtype=dtypes) 

# Ensure exceptions are thrown for invalid data. 

# valid date format in date. ValueError raised for invalid data. 
pd.to_datetime(df['Date']) 

# 'yes' or 'no' for the yesno field. (has to be in a list of values) 
# valid integer for int_val. 
# a valid integer or decimal number for decimal_value 

Ich bin nicht einmal sicher, dass der pd.to_datetime der beste Weg ist, ein Datum zu bestätigen. Was ist ein guter Weg, dies zu tun?

+0

Was möchten Sie tun, wenn Sie ungültige Daten finden? –

+0

Fehler beheben ist in Ordnung. Die Anweisung pd.to_datetime (df ['Date']) löst einen ValueError aus, wenn irgendwo ein ungültiges Datumsformat vorhanden ist. –

+0

Dann haben Sie Ihre Antwort. –

Antwort

1

'Ja' oder 'Nein' für das Feld 'Ja'. (Hat in einer Liste von Werten sein):

df.yesno.isin(['yes','no']).all() # Returns False if there are any other values 

gültige ganze Zahl für int_val:

df.int_val.astype(int) # Throws an error if there are non-integers 
# or, if int_val are floats: 
import numpy as np 
np.isclose(df.int_val.round(0),df.int_val.astype(int)).all() 

eine gültige Zahl oder Dezimalzahl für decimal_value:

df.decimal_value.astype(float) # similar to above 

pd.to_datetime() Verwendung zu validieren Daten sind wahrscheinlich am besten; Sie können bei Bedarf auch das Format der Daten angeben, z. mit dem Schlüsselwortargument format = '%y-%m-%d', das Daten in der Form yyyy-mm-dd erwartet.

+0

Vielen Dank. Das ist hilfreich. –

Verwandte Themen