2016-12-12 5 views
2

私はCSVデータセットを持っています。例えば、日付のうちのいくつかだけが間違って入力されます。 17/12/0089(これはdd/mm/yyyyであることに注意してください)、時には12/11/1898です。誤って入力した日付をパンダに置き換えます

私は私が使用したように、日付を比較する必要が

df_to_add['DOB'] = pd.to_datetime(df_to_add['DOB'], dayfirst=True) 

をしかし、それはこれらの間違った日付の一部渡って来るとき、私はメッセージ pandas.tslib.OutOfBoundsDatetime取得:境界ナノ秒のタイムスタンプのうち:964 -11-16 00:00:00

誤って入力された日付をNaTまたは空白として置き換えるにはどうすればよいですか?

+0

''12/11/1898''は有効とみなされますが、あなたの基準はどれくらい前からでしょうか? – EdChum

答えて

2

to_datetimeにパラメータerrors='coerce'を追加ためNaTに悪い値を変換:

df_to_add['DOB'] = pd.to_datetime(df_to_add['DOB'], dayfirst=True, errors='coerce') 

サンプル:

df_to_add = pd.DataFrame({'DOB':['12/11/1898','17/12/0089','05/12/2016']}) 
print (df_to_add) 
      DOB 
0 12/11/1898 
1 17/12/0089 
2 05/12/2016 

df_to_add['DOB'] = pd.to_datetime(df_to_add['DOB'], dayfirst=True, errors='coerce') 
print (df_to_add) 
     DOB 
0 1898-11-12 
1  NaT 
2 2016-12-05 

条件True場合、デフォルトのリターンNaTによっていくつかのtreshold利用maskによってNaTに変換する必要がある場合:

year = 1900 
df_to_add['DOB'] = pd.to_datetime(df_to_add['DOB'], dayfirst=True, errors='coerce') 
df_to_add['DOB'] = df_to_add['DOB'].mask(df_to_add['DOB'].dt.year < year) 
print (df_to_add) 
     DOB 
0  NaT 
1  NaT 
2 2016-12-05 
+0

ありがとうございます。シンプルでエレガントな作品です! –

関連する問題