微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Python-自pandas df中的纪元以来将日期时间对象转换为s后的偏移量

如何解决Python-自pandas df中的纪元以来将日期时间对象转换为s后的偏移量

我正在转换一些时间戳,例如:

tmp['start'] = tmp['chargingstart'].apply(lambda x: datetime.strptime(x[:19],"%Y-%m-%d %H:%M:%s").timestamp())

我认为这行得通。我期待正整数,但我检查

tmp.loc[(tmp['start']) < 0][['chargingstart','start']]

我明白了

        chargingstart           start
50053   1970-01-01 00:00:48+00  -3552.0
278149  1970-01-01 00:00:17+00  -3583.0
278150  1970-01-01 00:00:16+00  -3584.0
278152  1970-01-01 00:00:17+00  -3583.0
278153  1970-01-01 00:00:17+00  -3583.0
... ... ...
1590705 1970-01-01 00:00:00+00  -3600.0
1590978 1970-01-01 00:00:00+00  -3600.0
1591012 1970-01-01 00:00:00+00  -3600.0
1702854 1970-01-01 00:00:00+00  -3600.0
1772270 1970-01-01 00:00:00+00  -3600.0

我不知道为什么我会得到偏移量。有什么提示吗?

编辑:如果我分两步做同样的事情,它似乎有效。这是为什么?

tmp['convertToDtObject'] = tmp['chargingstart'].apply(lambda x: datetime.strptime(x[:19],"%Y-%m-%d %H:%M:%s"))
tmp['start'] = tmp['convertToDtObject'].apply(lambda x: x.timestamp())
tmp.loc[(tmp['start']) < 0][['chargingstart','convertToDtObject','start']]

解决方法

字符串采用 UTC 时区,您的格式字符串似乎不支持 tz。如果我使用以下内容,我会得到正确答案:

In [33]: from dateutil.parser import parse

In [34]: parse('1970-01-01 00:00:48+00')
Out[34]: datetime.datetime(1970,1,48,tzinfo=tzutc())

In [35]: parse(s).timestamp()
Out[35]: 48.0

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。