2016-09-23 53 views
1

數以百萬計的數據記錄在我的數據框中。我必須將字符串列轉換爲datetime。我做它,如下所示:Python熊貓在to_datetime上調試

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

但是某些字符串不是有效的日期時間字符串,因此我得到一個數值錯誤。我並不擅長使用Python進行調試,所以我正在努力尋找某些數據項不可轉換的原因。

我需要Python來顯示行號,以及不可轉換的值,而不是拋出一個無用的錯誤,它告訴我什麼都沒有。我怎樣才能做到這一點?

回答

2

您可以使用boolean indexing與條件,其中由isnull檢查NaT值創建to_datetime與參數errors='coerce' - 它創造NaT哪裏都是無效的日期時間:

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

樣品:

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

出於某種原因,如果一個錯誤被檢測到,整列被製成NaT。有任何想法嗎? ALLDATA [ 'GPS_DateTime'] = pd.to_datetime(ALLDATA [ 'GPS_DateTime'],錯誤= '要挾') errordata子= ALLDATA [ALLDATA [ 'GPS_DateTime']。ISNULL()] – user1035217

+0

我認爲你需要將其交換:'errorData = allData [allData ['GPS_DateTime']。isnull()]'僅用於檢查,所以首先檢查它,然後通過'allData ['GPS_DateTime'] = pd.to_datetime(allData ['GPS_DateTime' ],error ='coerce')' – jezrael

+0

allData ['GPS_DateTime'] = pd.to_datetime(allData ['GPS_DateTime'],errors ='coerce')給出了整列NaT – user1035217