首页 > 解决方案 > 如何将 Pandas 日期时间列的时间更改为午夜?

问题描述

使用 Pandas 1.0.0,如何在一行代码中将日期时间数据框列的时间更改为午夜?

例如:从

START_DATETIME
2017-02-13 09:13:33
2017-03-11 23:11:35
2017-03-12 00:44:32
...

START_DATETIME
2017-02-13 00:00:00
2017-03-11 00:00:00
2017-03-12 00:00:00
...

我的尝试:

df['START_DATETIME'] = df['START_DATETIME'].apply(lambda x: pd.Timestamp(x).replace(hour=0, minute=0, second=0))

但这会产生

START_DATETIME
    2017-02-13
    2017-03-11
    2017-03-12
    ...

标签: pythonpandas

解决方案


您的方法已将日期时间值正确转换为午夜。即,他们的时间是00:00:00。Pandas 只是智能地不显示时间部分,因为显示所有相同时间是多余的00:00:00。将结果分配回后START_DATETIME,将显示打印一个单元格

print(df.loc[0, START_DATETIME])

Output:
2017-02-13 00:00:00

此外,要将时间转换为00:00:00,您应该使用dt.normalizedt.floor

df['START_DATETIME'] = pd.to_datetime(df['START_DATETIME']).dt.normalize()

或者

df['START_DATETIME'] = pd.to_datetime(df['START_DATETIME']).dt.floor('D')

如果要强制 pandas00:00:00在系列输出中显示,则需要在转换START_DATETIMEstr转换为

pd.to_datetime(df['START_DATETIME']).dt.floor('D').dt.strftime('%Y-%m-%d %H:%M:%S')

Out[513]:
0    2017-02-13 00:00:00
1    2017-03-11 00:00:00
2    2017-03-12 00:00:00
Name: START_DATETIME, dtype: object

推荐阅读