将一列的值分为两列

Com*_*ata 3 python dataframe pandas

我有一个数据框,其列为"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']})
Run Code Online (Sandbox Code Playgroud)

我想在这一列中创建两列 - "last_updated_date"和"last_updated_time".此外,时间应为24小时格式.

如何使用pandas完成此任务?

Max*_*axU 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
Run Code Online (Sandbox Code Playgroud)

如果你想更快地做到并且你准备牺牲一些记忆,你可以这样做:

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
Run Code Online (Sandbox Code Playgroud)

更新:将日期和时间列保存到Excel

为了正确存储时间,我将时间转换为字符串/对象dtype:

df['last_updated_time'] = d.dt.strftime('%H:%M:%S')
Run Code Online (Sandbox Code Playgroud)

现在我们可以将它保存到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()
Run Code Online (Sandbox Code Playgroud)

结果(d:/temp/a.xlsx):

在此输入图像描述