2016-09-23 7 views
1

Millionen von Datensätzen ist in meinem Dataframe. Ich muss die String-Spalten in datetime konvertieren. Ich mache es wie folgt:Python Pandas Debugging auf to_datetime

allData['Col1'] = pd.to_datetime(allData['Col1']) 

jedoch einige der Saiten sind nicht gültig Datetime Strings und damit ich einen Wert Fehler. Ich bin nicht sehr gut im Debuggen in Python, also habe ich Mühe, den Grund zu finden, warum einige der Datenelemente nicht konvertierbar sind.

Ich brauche Python, um mir die Zeilennummer, sowie den Wert, der nicht konvertierbar ist, anstatt einen nutzlosen Fehler, der mir nichts sagt, zu werfen. Wie kann ich das erreichen?

Antwort

2

können Sie verwenden boolean indexing mit Bedingung, wo NaT Werte von isnull überprüfen erstellt to_datetime mit dem Parameter errors='coerce' - es NaT schaffen, wo sind ungültig Datetime:

allData1 = allData[pd.to_datetime(allData['Col1'], errors='coerce').isnull()] 

Probe:

allData = pd.DataFrame({'Col1':['2015-01-03','a','2016-05-08'], 
         'B':[4,5,6], 
         'C':[7,8,9], 
         'D':[1,3,5], 
         'E':[5,3,6], 
         'F':[7,4,3]}) 

print (allData) 
    B C  Col1 D E F 
0 4 7 2015-01-03 1 5 7 
1 5 8   a 3 3 4 
2 6 9 2016-05-08 5 6 3 

print (pd.to_datetime(allData['Col1'], errors='coerce')) 
0 2015-01-03 
1   NaT 
2 2016-05-08 
Name: Col1, dtype: datetime64[ns] 

print (pd.to_datetime(allData['Col1'], errors='coerce').isnull()) 
0 False 
1  True 
2 False 
Name: Col1, dtype: bool 


allData1 = allData[pd.to_datetime(allData['Col1'], errors='coerce').isnull()] 
print (allData1) 
    B C Col1 D E F 
1 5 8 a 3 3 4 
+0

Aus irgendeinem Grund, wenn man Fehler wird erkannt, die ganze Spalte wird NaT gemacht. Irgendwelche Ideen? ALLDATA [ 'GPS_DateTime'] = pd.to_datetime (Alldata [ 'GPS_DateTime'], 'coerce' Fehler =) Errordata = ALLDATA [ALLDATA [ 'GPS_DateTime']. Isnull()] – user1035217

+0

Ich glaube, Sie es tauschen müssen : 'errorData = allData [allData ['GPS_DateTime']. isnull()]' dient nur zum Überprüfen, also prüfen Sie es zuerst und konvertieren Sie es dann zu datetime mit 'allData ['GPS_DateTime'] = pd.to_datetime (allData ['GPS_DateTime' ], errors = 'coerce') ' – jezrael

+0

allData ['GPS_DateTime'] = pd.to_datetime (alleDaten ['GPS_DateTime'], errors = 'coerce') gibt eine ganze Spalte von NaT – user1035217

Verwandte Themen