Python:数据框的欧洲日期到欧洲Unix时间戳

时间:2020-05-15 10:18:14

标签: python dataframe date unix timestamp

我试图将“欧洲”“日期”列转换为“欧洲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

1 个答案:

答案 0 :(得分:1)

localize带有所需时区的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-24 10: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