首先,字符串转换为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
这是一个难题,需要模糊逻辑和更多的数据。使用你所拥有的,我可以确定我应该将2015-12-08''转换为'2015-08-12',但这只是在它旁边的内容中。问题是,这不是熊猫的问题。相反,这是一个你为捣乱数据问题而大吼一声的人。 – piRSquared
从8月/ 01/8/31开始,我有完整的月份数据。问题在于从Aug/01到Aug/12的数据的日期格式为yy-dd-mm,从8月13日到8月31日的日期格式为yy-mm-dd。我只需要一致的日期时间格式而不需要更改值列。 – johndaniel
你怎么知道它的8月份数据?而不是12月份的数据?对这个问题的回答可以提供清理过程中的逻辑。 – Parfait