将字符串日期变量转换为pandas中的datetime.datetime日期变量

时间:2013-11-03 04:57:25

标签: python pandas python-datetime

我有一个字符串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'

有人可以帮忙吗?

2 个答案:

答案 0 :(得分:2)

如果您的数据框中有字符串值'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

答案 1 :(得分: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。你打算用无效的价值做什么。