2017-03-02 5 views
1

私の共同編集者は、データに日付書式が一貫していません。日付をさまざまな形式で解析できますか?

0 13/11/2016 
1 21/01/2017 
2 22/01/2017 
3 2017-02-02 
4 2016-12-11 
5 13/11/2016 
6 2016-12-12 
7 21/01/2017 
8 22/01/2017 
9 2017-02-02 

これを解析して、Pythonで解析するためのタイムスタンプにしたいと考えています。 parse_dates = Trueを使ってもうまくいかず、フォーマットが混在していると思われます。

さまざまな形式の日付を解析できますか?

+0

try-except-ValueErrorを使用して、ファイル内のすべての可能な日付/時刻形式で行を解析します。 –

+2

あなたの協力者は、米国とヨーロッパの両方の日付を送信しますか?もしそうなら、あなたは '01-02-2017'をどのように評価しますか?それは2017年2月1日ですか、それとも2017年1月2日ですか? – aydow

答えて

1

あなたはto_datetimeを使用することができます。

まずフォーマット(YYYY-MM-DD):

print (df) 
     dates 
0 13/11/2016 
1 21/01/2017 
2 22/01/2017 
3 2017-02-02 
4 2016-12-11 
5 13/11/2016 
6 2016-12-12 
7 21/01/2017 
8 22/01/2017 
9 2017-02-02 
9 2017-02-25 <- YYYY-MM-DD 

dates = pd.to_datetime(df.dates) 
print (dates) 
0 2016-11-13 
1 2017-01-21 
2 2017-01-22 
3 2017-02-02 
4 2016-12-11 
5 2016-11-13 
6 2016-12-12 
7 2017-01-21 
8 2017-01-22 
9 2017-02-02 
9 2017-02-25 
Name: dates, dtype: datetime64[ns] 

第二のフォーマット(YYYY-DD-MM

それは少し問題がある - 最後の必要性パラメータformatto_datetimeerrors='coerce'combine_firstまたはfillna

print (df) 
     dates 
0 13/11/2016 
1 21/01/2017 
2 22/01/2017 
3 2017-02-02 
4 2016-12-11 
5 13/11/2016 
6 2016-12-12 
7 21/01/2017 
8 22/01/2017 
9 2017-02-02 
9 2017-25-02 <- YYYY-DD-MM 

dates1 = pd.to_datetime(df.dates, format='%d/%m/%Y', errors='coerce') 
dates2 = pd.to_datetime(df.dates, format='%Y-%d-%m', errors='coerce') 

dates = dates1.combine_first(dates2) 
#dates = dates1.fillna(dates2) 
print (dates) 
0 2016-11-13 
1 2017-01-21 
2 2017-01-22 
3 2017-02-02 
4 2016-11-12 
5 2016-11-13 
6 2016-12-12 
7 2017-01-21 
8 2017-01-22 
9 2017-02-02 
9 2017-02-25 
Name: dates, dtype: datetime64[ns] 
関連する問題