簡體   English   中英

將字符串date變量轉換為pandas中的datetime.datetime日期變量

[英]Convert string date variable to datetime.datetime date variable in pandas

我有一個date字符串。 我知道如何將其轉換為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'

誰能幫忙嗎?

如果數據框中有字符串值“ nan”:

>>> 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

您可以使用regexp來僅解析有效日期:

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。 您將如何處理無效值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM