我有一个数据框,其列为“last_updated”,类型为datetime64 [ns]:
df = pd.DataFrame({'last_updated': ['11/12/14 2:44 PM','5/18/15 11:36 AM','11/12/14
3:09 PM']})
我想在这一列中创建两列 - “last_updated_date”和“last_updated_time”。此外,时间应为24小时格式。
如何使用pandas完成此任务?
答案 0 :(得分:5)
试试这个:
In [89]: df['last_updated_date'] = pd.to_datetime(df.last_updated).dt.normalize()
In [90]: df['last_updated_time'] = pd.to_datetime(df.last_updated).dt.time
In [91]: df
Out[91]:
last_updated last_updated_date last_updated_time
0 11/12/14 2:44 PM 2014-11-12 14:44:00
1 5/18/15 11:36 AM 2015-05-18 11:36:00
2 11/12/14 3:09 PM 2014-11-12 15:09:00
如果你想更快地做到并且你准备牺牲一些记忆,你可以这样做:
In [95]: df
Out[95]:
last_updated
0 11/12/14 2:44 PM
1 5/18/15 11:36 AM
2 11/12/14 3:09 PM
In [96]: d = pd.to_datetime(df.last_updated)
In [97]: df['last_updated_date'] = d.dt.normalize()
In [98]: df['last_updated_time'] = d.dt.time
In [99]: del d
In [100]: df
Out[100]:
last_updated last_updated_date last_updated_time
0 11/12/14 2:44 PM 2014-11-12 14:44:00
1 5/18/15 11:36 AM 2015-05-18 11:36:00
2 11/12/14 3:09 PM 2014-11-12 15:09:00
更新:将日期和时间列保存到Excel
为了正确存储时间,我会将时间转换为字符串/对象dtype:
df['last_updated_time'] = d.dt.strftime('%H:%M:%S')
现在我们可以将其保存到Excel:
In [133]: writer = pd.ExcelWriter(r'd:/temp/a.xlsx', datetime_format='YYYY-MM-DD')
In [134]: df.to_excel(writer, index=False)
In [135]: writer.close()
结果(d:/temp/a.xlsx):
答案 1 :(得分:2)