通过砍伐日期时间

时间:2017-08-09 10:09:03

标签: python pandas jupyter-notebook

过去几个小时我一直难过,试图解决以下问题。

在我从自动系统获得的大型数据集中,有一个DATE_TIME值,对于午夜时分的行,其值不会像整个小时一样: 12-MAY-2017 0:16:20

当我尝试将其转换为日期(以便其可用于转换)时,如下所示:

df['DATE_TIME'].astype('datetime64[ns]')

我收到以下错误:

Error parsing datetime string "12-MAY-2017  0:16:20" at position 3

我尝试写一些REGEX来拉出每一块但是无法得到任何工作,因为小时可以分别是1或2个字符。它似乎也不是为每个peice写正则表达式的理想解决方案。

有关于此的任何想法吗?

2 个答案:

答案 0 :(得分:3)

尝试使用pandas.to_datetime()方法:

df['DATE_TIME'] = pd.to_datetime(df['DATE_TIME'], errors='coerce')

参数errors='coerce'会处理那些无法转换为datatime dtype的字符串

答案 1 :(得分:3)

我认为你只需要pandas.to_datetime

df  = pd.DataFrame({'DATE_TIME':['12-MAY-2017 0:16:20','12-MAY-2017 0:16:20']})
print (df)
             DATE_TIME
0  12-MAY-2017 0:16:20
1  12-MAY-2017 0:16:20

df['DATE_TIME'] = pd.to_datetime(df['DATE_TIME'])
print (df)
            DATE_TIME
0 2017-05-12 00:16:20
1 2017-05-12 00:16:20

astype转换为numpy似乎problematic,因为需要strings in ISO 8601 date or datetime format

df['DATE_TIME'].astype('datetime64[ns]')
  

ValueError:在位置3解析日期时间字符串“12-MAY-2017 0:16:20”时出错

编辑:

如果日期时间被破坏(某些字符串或整数),则使用MaxU answer