Python:欧洲数据帧到欧洲unix时间戳的日期

Python:欧洲数据帧到欧洲unix时间戳的日期,python,dataframe,date,unix,timestamp,Python,Dataframe,Date,Unix,Timestamp,我试图将我的Europe Date列转换为Europe unix时间戳列。不幸的是,我总是得到错误的unix时间戳。。。我的数据框如下所示: Index Date Second Measurement 0 0 2020-02-24 10:52:38 0.000 0.001155460021 1 1 2020-02-24 10:52:39 0.109 0.001124729984 2 2 2020-02-24 10:52:4

我试图将我的Europe Date列转换为Europe unix时间戳列。不幸的是,我总是得到错误的unix时间戳。。。我的数据框如下所示:

      Index            Date Second     Measurement
0     0 2020-02-24 10:52:38  0.000  0.001155460021
1     1 2020-02-24 10:52:39  0.109  0.001124729984
2     2 2020-02-24 10:52:40  0.203  0.001119069988
我尝试了以下代码,但第一个值总是10:52:38 1582541558。但问题应该是1582537958,python不知道我在使用欧洲CET吗

df["DateUnix"] = df.Date.map(lambda x: x.timestamp())  #fail

timestamp = (df.Date - pd.Timestamp("1970-01-01")) // pd.Timedelta('1s')    #fail
在提取时间戳之前,使用所需的时区本地化datetime对象,例如

import pandas as pd

dt = pd.to_datetime('2020-02-24 10:52:38').tz_localize(tz='Europe/Berlin')
ts = dt.timestamp()

assert int(ts) == 1582537958
为什么??从“2020-02-2410:52:38”这样的字符串中获得的datetime对象将是幼稚的,这意味着它不知道时区。如果随后调用.timestamp,Python将假定datetime对象属于操作系统的时区,并在返回POSIX时间戳之前转换为UTC

例如:

from datetime import datetime, timezone
ts_naive = datetime(2020, 5, 15).timestamp()
ts_utc = datetime(2020, 5, 15, tzinfo=timezone.utc).timestamp()
# my OS is on UTC+2, so ts_naive should be ts_utc - 2*3600:
assert ts_utc - 2*3600 == ts_naive

谢谢你的解释。如果我将您的代码改编为我的代码:df['Date']=pd.DatetimeIndexpd.to_datetimedf.Date.tz_localizetz='Europe/Berlin',我得到:>>2020-02-24 10:52:38+01:002020-02-24 10:52:38+01:00是正确的,因为在二月份,DST是非活动的,所以欧洲/柏林是UTC+1