将一列的值分为两列

时间:2016-10-28 19:00:29

标签: python pandas dataframe

我有一个数据框,其列为“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完成此任务?

2 个答案:

答案 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):

enter image description here

答案 1 :(得分:2)

您可以将日期时间列转换为字符串(日期和时间部分),然后将它们转换为24小时格式,如下所示:

new_cols = ['last_updated_date', 'last_updated_time']
df[new_cols] = pd.to_datetime(df['last_updated'], format='%m/%d/%y %I:%M %p')   \
                 .astype(str).str.split(expand=True)

df

Image

这会保留将其导出为ex​​cel时的值。