2016-05-29 170 views
1

我使用Jupyter Notebook,Pandas框架和Python作爲編程語言。 我有一個數據幀,其形狀如下(10500,4)。所以它有4列和10500條記錄。 Initial_Date是4個列中的一個,它是一個Object數據類型。這是所含信息的類型:在Python中將Object數據類型的內容轉換爲Date數據類型

Initial_Date 
1971 
11969 
102006 
03051992 
00131954 
27001973 
45061987 
1996 

這是很容易辨認出列DDMMYYYY的格式(03051992是第3次1992年5月)

注:正如你可以看到有無效MM(00和13)和無效DD(00和45)。

我想使用正則表達式來提取任何可用的字段。我不知道如何分別閱讀YYYY到MM或DD,所以請在這裏給我啓發。提取後,我想測試YYYY,DD和MM是否有效。如果其中任何一個都無效,則分配NaT否則爲DD-MM-YYYY或DD/MM/YYYY(不要與最終格式混淆)。

例如: 051992因爲這成爲被視爲無效DD/05/1992

具有完全8位數字,例如10081996被認爲是有效1996年10月8日

PS的字段。我開始使用熊貓,Jupyter筆記本,並放慢了恢復我的Python技能。僅供參考如果你們認爲有更好的方法將每個字段轉換爲有效的日期數據類型,那麼請啓發我。

回答

1

你能做到這樣:

result = pd.to_datetime(d.Initial_Date.astype(str), dayfirst=True, errors='coerce') 

result.ix[result.isnull()] = pd.to_datetime(d.Initial_Date.astype(str), format='%d%m%Y', dayfirst=True, errors='coerce') 
#format is set to %d%m%Y 

結果:

In [88]: result 
Out[88]: 
0 1971-01-01 
1   NaT 
2 2006-10-20 
3 1992-03-05 
4 1954-01-03 
5   NaT 
6   NaT 
7 1996-01-01 
Name: Initial_Date, dtype: datetime64[ns] 

原DF

In [89]: d 
Out[89]: 
    Initial_Date 
0   1971 
1   11969 
2  102006 
3  3051992 
4  131954 
5  27001973 
6  45061987 
7   1996 
+0

非常感謝MaxU!對延遲答覆抱歉。除了我需要將格式從%m%d%Y更改爲%d%m%Y – Timetraveller

+0

@Timetraveller,我總是很樂意提供幫助!感謝您接受答案! – MaxU