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