我有一个数据框,其中包含名为“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完成这个任务?
试试这个:
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
为了正确存储时间,我会将时间转换为字符串/object数据类型:
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):
df[new_cols] = pd.to_datetime(df.last_updated).dt.strftime('%Y-%m-%d %H:%M:%S').str.split(expand=True)
- MaxU - stand with Ukraine