2016-11-16 58 views
1

我已经为月/ 2015年月份的一些数据在数据帧的格式如下:不一致的日期时间格式熊猫

Timestamp     Value 

2015-12-08 23:58:00   3.4 
2015-12-08 23:59:00   3.2 
2015-08-13 00:00:00   1.1 
2015-08-13 00:01:00   0.9 

有两种格式YY-MM-DD和YY-MM-DD (从8月13日开始)。我正在努力将这些转换为通用格式。任何帮助,将不胜感激。

感谢

+1

这是一个难题,需要模糊逻辑和更多的数据。使用你所拥有的,我可以确定我应该将2015-12-08''转换为'2015-08-12',但这只是在它旁边的内容中。问题是,这不是熊猫的问题。相反,这是一个你为捣乱数据问题而大吼一声的人。 – piRSquared

+0

从8月/ 01/8/31开始,我有完整的月份数据。问题在于从Aug/01到Aug/12的数据的日期格式为yy-dd-mm,从8月13日到8月31日的日期格式为yy-mm-dd。我只需要一致的日期时间格式而不需要更改值列。 – johndaniel

+0

你怎么知道它的8月份数据?而不是12月份的数据?对这个问题的回答可以提供清理过程中的逻辑。 – Parfait

回答

1

首先,字符串转换为DATATIME,在预期正确的格式开始,并要求忽略错误:

df['Correct'] = pd.to_datetime(df.Timestamp, 
           format='%Y-%d-%m %H:%M:%S', 
           errors='coerce') 


df.Correct 
Out[34]: 
0 2015-08-12 23:58:00 
1 2015-08-12 23:59:00 
2     NaT 
3     NaT 
Name: Correct, dtype: datetime64[ns] 

现在你知道在哪里可以申请第二格式:

df.Correct.update(pd.to_datetime(df[df.Correct.isnull()].Timestamp, 
           format='%Y-%m-%d %H:%M:%S', 
           errors='coerce')) 
df 
Out[36]: 
      Timestamp Val    Correct 
0 2015-12-08 23:58:00 3.4 2015-08-12 23:58:00 
1 2015-12-08 23:59:00 3.2 2015-08-12 23:59:00 
2 2015-08-13 00:00:00 1.1 2015-08-13 00:00:00 
3 2015-08-13 00:01:00 0.9 2015-08-13 00:01:00