【发布时间】:2021-05-05 22:04:20
【问题描述】:
我有一个包含许多日期时间值的数据框。我想将这些时间部分更改为对数据框中所有观察值都相同的特定时间,但保留日期时间的日期部分。
我可以使用datetime 包和.replace() 函数通过单个日期时间完成此操作:
import datetime
dt_test=datetime.datetime(2020, 5, 17,21,30,15)
print(dt_test)
dt_test=dt_test.replace(hour=6,minute=0,second=0)
print(dt_test)
返回:
2020-05-17 21:30:15
2020-05-17 06:00:00
我觉得我应该可以使用 .dt 运算符将其应用于整个列,但是当我尝试这样做时收到错误。
import pandas as pd
dates=[
datetime.datetime(2018,1,1,4,30,15),
datetime.datetime(2018,1,2,4,30,15),
datetime.datetime(2018,1,3,4,30,15),
datetime.datetime(2018,1,3,6,0,0),
datetime.datetime(2018,1,3,12,30,15),
datetime.datetime(2018,1,1,4,30,15),
datetime.datetime(2018,1,2,4,30,15),
datetime.datetime(2018,1,4,4,30,15),
datetime.datetime(2018,1,2,12,30,15),
datetime.datetime(2018,1,4,12,30,15),
]
ids=list(range(len(dates)))
df=pd.DataFrame(zip(ids,dates),columns=['id','date_time'])
df
返回:
id date_time
0 0 2018-01-01 04:30:15
1 1 2018-01-02 04:30:15
2 2 2018-01-03 04:30:15
3 3 2018-01-03 06:00:00
4 4 2018-01-03 12:30:15
5 5 2018-01-01 04:30:15
6 6 2018-01-02 04:30:15
7 7 2018-01-04 04:30:15
8 8 2018-01-02 12:30:15
9 9 2018-01-04 12:30:15
“date_time”列是 dtype: datetime64[ns],根据需要(请参阅this 问题)。
然后我尝试将 pandas 的 .replace() 函数与 .dt 运算符一起使用:
df['date_time'].dt.replace(hour=6,minute=0,second=0)
df
但我收到以下错误(使用 jupyter,如果这很重要):
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-13-65a7bb8c3365> in <module>
----> 1 df['date_time'].dt.replace(hour=6,minute=0,second=0)
2 df
AttributeError: 'DatetimeProperties' object has no attribute 'replace'
如何有效地替换 pandas 列中 datetime 变量的时间部分?
注意:我发现 this 问题可以将所有日期的时间设置为午夜,但时间对我来说很重要,不太可能是午夜。
【问题讨论】:
-
@MrFuppes 即使我不接受它(我有两个可以接受的答案),我确实认为您的答案增加了价值并展示了另一种做事方式(两种使用 pd.Timedelta() 的另一种方式并使用 floor() 函数。请随意转发它 - 我至少从中学到了。如果您也想包含这些结果,显示基准测试结果也会增加额外的价值。
标签: python pandas dataframe datetime