Python 转换为时间戳并返回会更改原始的时间戳

Python 转换为时间戳并返回会更改原始的时间戳,python,pandas,date,datetime,timestamp,Python,Pandas,Date,Datetime,Timestamp,我想把日期改成时间戳,做一些处理,然后改回原来的时间 当我往回更改时,日期与原始日期和时间不相等 我从以下几点开始: DatetimeIndex(['2004-01-02 09:30:00', '2004-01-02 09:31:00', '2004-01-02 09:32:00', '2004-01-02 09:33:00', '2004-01-02 09:34:00'], dtype='datetime6

我想把日期改成时间戳,做一些处理,然后改回原来的时间

当我往回更改时,日期与原始日期和时间不相等

我从以下几点开始:

DatetimeIndex(['2004-01-02 09:30:00', '2004-01-02 09:31:00',
               '2004-01-02 09:32:00', '2004-01-02 09:33:00',
               '2004-01-02 09:34:00'],
              dtype='datetime64[ns]', name='date', freq=None)
然后我将其更改为时间戳,如下所示:

timestamps = [date.timestamp() for date in dates]
回来

original = [pd.Timestamp.fromtimestamp(timestamp) for timestamp in timestamps]
我得到:

[Timestamp('2004-01-02 11:30:00'),
 Timestamp('2004-01-02 11:31:00'),
 Timestamp('2004-01-02 11:32:00'),
 Timestamp('2004-01-02 11:33:00'),
 Timestamp('2004-01-02 11:34:00')]
由于某种原因,时间向前移动了2个小时

我可以从每个日期中减去2小时,但我认为这很容易出错,因为它可能会在数百万个我不知道的数组中产生更多未定义的行为,我宁愿先确定方法

如何重建原始数据

我使用的是Python 3.7.6和pandas 1.0.1,来自:

从时间戳(ts)将时间戳[,tz]从POSIX时间戳转换为tz的本地时间

这里的重点是当地时间。您观察到的差异是当地时间与UTC的差异

pandas
将原始日期时间(未指定时区)视为UTC。所以获得原始时间的正确方法是

import pandas as pd

dates = pd.DatetimeIndex(['2004-01-02 09:30:00', '2004-01-02 09:31:00',
                          '2004-01-02 09:32:00', '2004-01-02 09:33:00',
                          '2004-01-02 09:34:00'])

timestamps = [date.timestamp() for date in dates] # Unix seconds since epoch (UTC)
# timestamps = dates.values.astype(int)/1e9 # would be more efficient btw.

original = pd.to_datetime(timestamps, unit='s')

# original
# DatetimeIndex(['2004-01-02 09:30:00', '2004-01-02 09:31:00',
#                '2004-01-02 09:32:00', '2004-01-02 09:33:00',
#                '2004-01-02 09:34:00'],
#               dtype='datetime64[ns]', freq=None)

你想用这种转换来解决什么问题?另外,作为补充说明,您的Python和pandas版本不是最新的。您好,谢谢您的说明。。我正在使用这里提供的一个代码,它在调用新的_quotes方法后执行一些逻辑,它将我输入的日期转换为时间戳以执行其逻辑,我希望以后以原始的人类可读格式返回日期。这将产生正确的结果,谢谢!据我所知,为了使用.fromtimestamp,我会根据我的机器与UTC时间的差异得到一个结果,在我的情况下,我是UTC+2,所以09:30变为11:30,我需要先将时间转换为不同的时区,然后才能使用them@orie通常,您可以使用aware datetime(时区集)从一开始,但如果这一切顺利进行,则取决于上下文。您遇到的意外结果就是一个必须小心处理datetime的示例;-)