如何将Pandas日期时间列的时间更改为午夜?

7

如何使用Pandas 1.0.0将datetime数据框列的时间更改为午夜?只需要一行代码即可完成。

例如: from

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
...

My attempt:

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
    ...
2个回答

12
你的方法已经正确地将日期时间值转换为午夜。也就是说,它们的时间为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.normalize或者dt.floor
df['START_DATETIME'] = pd.to_datetime(df['START_DATETIME']).dt.normalize()

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

如果你想强制 Pandas 在系列输出中显示 00:00:00,需要在转换 START_DATETIME 之后将其转换为 str
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

2

你可以做:

import pandas as pd

df=pd.DataFrame({"START_DATETIME":
["2017-02-13 09:13:33","2017-03-11 23:11:35","2017-03-12 00:44:32"]})

#you should convert it to date time first
#in case if it's not already:

df["START_DATETIME"]=pd.to_datetime(df["START_DATETIME"])

df["START_DATETIME_DT"]=df["START_DATETIME"].dt.strftime("%Y-%m-%d 00:00:00")

输出:

       START_DATETIME    START_DATETIME_DT
0 2017-02-13 09:13:33  2017-02-13 00:00:00
1 2017-03-11 23:11:35  2017-03-11 00:00:00
2 2017-03-12 00:44:32  2017-03-12 00:00:00

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接