2016-03-31 9 views
0

Ich habe einen Pandas Datenrahmen, der eine Datumsspalte hat, die das Format '2016-01-17' haben sollte.Optimieren String-Prüffunktion für Pandas Dataframe?

Gelegentlich sind die Daten Junk und können etwas wie "0-1274753-3" aussehen, und ich möchte diese Zeilen entfernen.

Mein Versuch war im Grunde zu definieren, eine Funktion, um zu überprüfen, ob eine Zeichenfolge ein Datum ist und dann für jeden Eintrag in der Spalte anzuwenden, Zeilen auszugeben, die fehlschlagen. Dies ist ein langsamer Prozess über einen großen Datenrahmen und ich hoffe, eine bessere Lösung zu finden.

Der aktuelle Versuch wie folgt aussieht:

from dateutil.parser import parse 

def is_date (string): 
    try: 
     parse (string) 
     return True 
    except ValueError: 
     return False 

df = df [df.datecol.apply(is_date)] 

Antwort

1

Verwenden errors='coerce' ungültiges Datum Strings NaN zu konvertieren. Dann dropna() verwenden, um Zeilen mit NaN Werte fallen zu lassen:

import pandas as pd 
df = pd.DataFrame({'datecol':['2016-01-17', '0-1274753-3']}) 
df['datecol'] = pd.to_datetime(df['datecol'], errors='coerce') 
# this drops all rows which contain NaN 
df = df.dropna(axis=0, how='any') 
# alternatively, use this to drop all rows which contain NaN in the datecol column 
# df = df.loc[pd.notnull(df['datecol'])] 
print(df) 

ergibt

 datecol 
0 2016-01-17