2013-11-03 80 views
1

我有一個字符串date。我知道如何將其轉換爲datetime.datetime對象(當沒有丟失!!!),但問題是我有一些缺失的值。我做不到。將字符串日期變量轉換爲pandas中的datetime.datetime日期變量

比方說,input_date是字符串的原始日期變量。我想生產input_date_fmt變量,它是datetime.datetime。我正在嘗試運行以下

DF['input_date_fmt'] = np.array([datetime.datetime.strptime(x, "%m/%d/%Y").date() 
           for x in DF['input_date']]) 

但誤差

ValueError: time data 'nan' does not match format '%m/%d/%Y' 

任何人都可以請幫助?

+0

你打算對這些無效值做什麼?扔掉它們或使用一些回退值? – satoru

回答

0

您可以使用正則表達式來解析有效日期:

DF['input_date_fmt'] = np.array([datetime.datetime.strptime(x, "%m/%d/%Y").date() 
          for x in DF['input_date']] if re.match('(0[1-9]|[12][0-9]|3[01])\/(0[1-9]|1[012])\/(19|20)\d\d', x)) 

但我與Satoru.Logic同意。你打算如何處理無效值。

2

如果你有字符串值「男」在你的數據幀:

>>> df = pd.DataFrame({'input_date':['01/01/2003', '02/29/2012', 'nan', '03/01/1995']}) 
>>> df 
    input_date 
0 01/01/2003 
1 02/29/2012 
2   nan 
3 03/01/1995 

,你可以將其轉換爲NaN轉換爲日期前:

>>> df.ix[df['input_date'] == 'nan', 'input_date'] = np.NaN 
>>> df 
    input_date 
0 01/01/2003 
1 02/29/2012 
2   NaN 
3 03/01/1995 

然後你就可以做你的轉換。但更簡單的方法是使用矢量化操作to_datetime將字符串轉換爲datetime:

>>> df = pd.DataFrame({'input_date':['01/01/2003', '02/29/2012', 'nan', '03/01/1995']}) 
>>> pd.to_datetime(df['input_date']) 
0 2003-01-01 00:00:00 
1 2012-02-29 00:00:00 
2     NaT 
3 1995-03-01 00:00:00 
相關問題