UNIX转换成时间戳大熊猫日期时间服用时区考虑

时间:2019-01-30 19:37:14

标签: python pandas datetime

我想使用Python中的to_datetime()arrow库将包含UNIX时间戳的以下pandas系列转换为pandas datetime。我想将时区设置为UTC,当前为Europe/Paris

对于Pandas,我正在使用以下功能,但不确定如何考虑Europe\Paris时区

pd.to_datetime(df['dates'], unit='s')

3 个答案:

答案 0 :(得分:1)

如果要传递使用欧洲\巴黎时区的日期时间对象:

在转换时通过utc=True,如下所示:

pd.to_datetime(df['dates'], unit='s', utc=True)

引用pd.to_datetime()文档:

utc : boolean, default None
    Return UTC DatetimeIndex if True (converting any tz-aware
    datetime.datetime objects as well).

或者,如果需要更多控制,请使用pd.Series.dt.tz_convert()

如果时间戳是使用Europe \ Paris时区生成的:

您应将时间戳转换为本地datetime对象,使用原始时区将其本地化(使其成为可识别时区的datetime对象),然后将其转换为所需的时区。

赞:

# convert timestamp to native datetime
ps = pd.to_datetime(df['dates'], unit='s')  # dtype: datetime64[ns]
# localize it to Europe/Paris
ps = ps.dt.tz_localize('Europe/Paris')  # dtype: datetime64[ns, Europe/Paris]
# Finaly, convert to UTC
ps = ps.dt.tz_convert('UTC')  # dtype: datetime64[ns, UTC]

tz_localizetz_convert之间的区别在于,第一个不会将时间移动到另一个时区,而第二个会移动。

答案 1 :(得分:0)

尝试使用:

pd.to_datetime(df['dates'], unit='s').astype('datetime64[ns, Europe/Paris]').dt.tz_convert('UTC')

或者如果版本低于0.24.0,则可以使用:

s = pd.to_datetime(df['dates'], unit='s').dt.tz_localize('Europe/Paris')
s.dt.tz_convert('UTC')

答案 2 :(得分:0)

假设您具有这样的数据集,

2019-02-02 11:32:46.484236    4
2019-02-03 11:32:46.484236    1
2019-02-04 11:32:46.484236    8
2019-02-05 11:32:46.484236    2
2019-02-06 11:32:46.484236    4
2019-02-07 11:32:46.484236    2
2019-02-08 11:32:46.484236    5
2019-02-09 11:32:46.484236    5
2019-02-10 11:32:46.484236    6
2019-02-11 11:32:46.484236    1

下面是在'Asia/Kolkata'时区。

根据您的问题,您需要从此处获得UTC时区。

因此,对于首先,你需要为本地化的是,该数据集属于哪个时区?

所以,为此.....

df = df.tz_localize(tz = 'Asia/Kolkata')

它会使的局部化在的名称'Asia/Kolkata'

输出:

2019-02-02 11:32:46.484236+05:30    4
2019-02-03 11:32:46.484236+05:30    1
2019-02-04 11:32:46.484236+05:30    8
2019-02-05 11:32:46.484236+05:30    2
2019-02-06 11:32:46.484236+05:30    4
2019-02-07 11:32:46.484236+05:30    2
2019-02-08 11:32:46.484236+05:30    5
2019-02-09 11:32:46.484236+05:30    5
2019-02-10 11:32:46.484236+05:30    6
2019-02-11 11:32:46.484236+05:30    1

现在您可以转换您的'Asia/Kolkata'时区为UTC。 这样...

df = df.tz_convert(tz = 'UTC')

输出:

2019-02-02 06:02:46.484236+00:00    4
2019-02-03 06:02:46.484236+00:00    1
2019-02-04 06:02:46.484236+00:00    8
2019-02-05 06:02:46.484236+00:00    2
2019-02-06 06:02:46.484236+00:00    4
2019-02-07 06:02:46.484236+00:00    2
2019-02-08 06:02:46.484236+00:00    5
2019-02-09 06:02:46.484236+00:00    5
2019-02-10 06:02:46.484236+00:00    6
2019-02-11 06:02:46.484236+00:00    1

您可以在'Europe\Paris'时区中进行同样的操作。