如何解决Python 计算了未来 50 年的 Timedelta,应该是同一天
这是对Calculating new column value in dataframe based on next rows column value
的跟进上一个问题中的解决方案适用于以字符串形式保存 hh:mm:ss 值的列。
我尝试应用(没有双关语)相同的逻辑来计算一列熊猫时间戳的 1 秒差异:
serverOptions: {
key: fs.readFileSync(__dirname + '/servercert/server_key.pem'),cert: fs.readFileSync(__dirname + '/servercert/server_cert.pem'),}
在一轮编码中我错误地将系列作为列应用于 df 的行更改为:
# 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) )
结果……很有趣。 end_time 的格式正确,但日期部分...
df = df.assign( end_time=s.add(pd.Timestamp('now').normalize()))
我预计 end_time Timedelta 比 start_time 少 1 秒。正如你所看到的,情况并非如此! end_time Timedelta 是未来 51 年!
有人可以解释一下这是如何/为什么发生的吗?没有对 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
解决方法
解决这个问题很简单,就是盯着我的脸。
违规代码:
s = pd.to_timedelta(df.start_time).shift(-1).sub(pd.offsets.Second(1))
创建时间戳类型系列/列的结束时间的正确方法:
s = pd.to_timestamp(df.start_time).shift(-1).sub(pd.offsets.Second(1))
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。