Python 计算出50年后的Timedelta,应该是同一天
Python calculated Timedelta 50 years in future, should be same day
这是
的跟进
上一个问题中的解决方案适用于将 hh:mm:ss 值作为字符串保存的列。
我尝试应用(没有双关语意)相同的逻辑来计算 pandas 时间戳列上的 1 秒差异:
# df.start_time is now of type <class 'pandas._libs.tslibs.timestamps.Timestamp'>
# in yyyy-dd-mm hh:mm:ss format
s = pd.to_timedelta(df.start_time).shift(-1).sub(pd.offsets.Second(1))
df = df.assign( end_time=s.add(pd.Timestamp('now').normalize()).dt.time.astype(str) )
由于在一轮编码中出错,我将系列作为列应用于 df 的行更改为:
df = df.assign( end_time=s.add(pd.Timestamp('now').normalize()))
结果……很有趣。 end_time 格式正确,但日期部分...
start_time end_time
2021-03-30 16:58:13 2072-06-28 03:17:30.192227
2021-03-30 17:00:00 2072-06-28 03:17:32.192227
我预计 end_time Timedelta 比 start_time 少 1 秒。如您所见,事实并非如此! end_time Timedelta 是 51 年后的未来!
有人可以解释一下 how/why 这件事发生了吗?没有显式调用 pd.offsets.DateOffset(years=50)
这个问题的解决方案很简单,而且让我眼前一亮。
违规代码:
s = pd.to_timedelta(df.start_time).shift(-1).sub(pd.offsets.Second(1))
正确 创建时间戳类型 end_time 的方法 series/column:
s = pd.to_timestamp(df.start_time).shift(-1).sub(pd.offsets.Second(1))
这是
上一个问题中的解决方案适用于将 hh:mm:ss 值作为字符串保存的列。
我尝试应用(没有双关语意)相同的逻辑来计算 pandas 时间戳列上的 1 秒差异:
# df.start_time is now of type <class 'pandas._libs.tslibs.timestamps.Timestamp'>
# in yyyy-dd-mm hh:mm:ss format
s = pd.to_timedelta(df.start_time).shift(-1).sub(pd.offsets.Second(1))
df = df.assign( end_time=s.add(pd.Timestamp('now').normalize()).dt.time.astype(str) )
由于在一轮编码中出错,我将系列作为列应用于 df 的行更改为:
df = df.assign( end_time=s.add(pd.Timestamp('now').normalize()))
结果……很有趣。 end_time 格式正确,但日期部分...
start_time end_time
2021-03-30 16:58:13 2072-06-28 03:17:30.192227
2021-03-30 17:00:00 2072-06-28 03:17:32.192227
我预计 end_time Timedelta 比 start_time 少 1 秒。如您所见,事实并非如此! end_time Timedelta 是 51 年后的未来!
有人可以解释一下 how/why 这件事发生了吗?没有显式调用 pd.offsets.DateOffset(years=50)
这个问题的解决方案很简单,而且让我眼前一亮。
违规代码:
s = pd.to_timedelta(df.start_time).shift(-1).sub(pd.offsets.Second(1))
正确 创建时间戳类型 end_time 的方法 series/column:
s = pd.to_timestamp(df.start_time).shift(-1).sub(pd.offsets.Second(1))