2017-02-06 5 views
1

データフレームには1,000万レコードが含まれています。 すべての列は 'str'データ型です。パンダの日付列から不一致値を見つける方法

私のデータフレームとみなしてください。

 id location name  Dob  death 
0 11066 location 481 2017-02-01 2017-02-03  
1 18000 location 962 1990-01-27 2016-01-26  
2 16964 location 491 1sssssssss 2016-01-26 
3 4795 location 532 1990-01-29 2016-01-26 
4 3392 location 600 1990-01/30 2016-01-26 

私は「ドブ」列の値が日付型でない行/観測を知りたいです。

を出して期待:

​​

私はすでに以下のコードが、実行速度の面でその非常に遅くしてみてください。

サンプルコード:

temp_list = list() 
for index, data in enumerate(df['Dob']): 
    try: 
     pd.to_datetime(data) 
    except: 
     temp_list.append(index) 

実行中に、より高速である任意の代替方法。

答えて

1

あなたはboolean indexing値は形式%Y-%m-%dと一致しない場合、その後isnullNaTを確認し、リターンNaTためのパラメータerrors='coerce'to_datetimeを必要とし、最後の使用:

print (pd.to_datetime(df.Dob, errors='coerce', format='%Y-%m-%d')) 
0 2017-02-01 
1 1990-01-27 
2   NaT 
3 1990-01-29 
4   NaT 
Name: Dob, dtype: datetime64[ns] 

mask = pd.to_datetime(df.Dob, errors='coerce', format='%Y-%m-%d').isnull() 
print (mask) 
0 False 
1 False 
2  True 
3 False 
4  True 
Name: Dob, dtype: bool 

print (df[mask]) 
     id location name   Dob  death 
2 16964 location 491 1sssssssss 2016-01-26 
4 3392 location 600 1990-01/30 2016-01-26 

formatを省略した場合、to_datetimeはので、多分、変換してみてくださいいくつかの値はDateTimeに出力され、出力にはNOがキャストされます:

print (pd.to_datetime(df.Dob, errors='coerce')) 
0 2017-02-01 
1 1990-01-27 
2   NaT 
3 1990-01-29 
4 1990-01-30 
Name: Dob, dtype: datetime64[ns] 

print (df[pd.to_datetime(df.Dob, errors='coerce').isnull()]) 
     id location name   Dob  death 
2 16964 location 491 1sssssssss 2016-01-26 
関連する問題