2016-09-23 45 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