簡體   English   中英

pandas.to_datetime() 如何從本地時區轉換為 UTC unix 時間戳?

[英]pandas.to_datetime() how to convert from local timezone to UTC unix timestamp?

我有一個“YYYY-MM-DD”形式的日期值列表。 這些值位於本地 PC 的時區(我不知道)。 這些值在 Pandas dataframe 中作為系列加載,我想將它們轉換為 UTC 時間戳。

  1. 如果我使用非常簡單的代碼:
ts = pd.to_datetime(s, format="%Y-%m-%d")
print(ts[0])
print(int(ts[0].timestamp()))
print(ts[0].strftime("%d.%m.%Y %Z"))

它給了我 output:

2021-01-01 00:00:00
1609459200   --> this is 'Friday, January 1, 2021 0:00:00 UTC'
01.01.2021

即它將源字符串作為UTC 並將其放入UTC。 但我的源字符串是本地時間,output 不正確。

  1. 然后我找到了一個以這種方式在源字符串中提供時區信息的選項:
s = pd.Series(['2021-01-01 Europe/Moscow', '2021-01-02 Europe/Moscow'])
ts = pd.to_datetime(s, format="%Y-%m-%d %Z")
print(ts[0])
print(int(ts[0].timestamp()))
print(ts[0].strftime("%d.%m.%Y %Z"))

它給了我真正需要的結果:

2021-01-01 00:00:00+03:00
1609448400 --> this is correct 'Thursday, December 31, 2020 21:00:00 UTC'
01.01.2021 MSK

但是時區名稱在這里是硬編碼的。

  1. 因此,我需要從我的代碼工作的 PC 獲取本地時區名稱。 我試過這樣:
from datetime import datetime
from dateutil import tz
print(datetime.now(tz.tzlocal()).tzname())

它給了我 output MSK 但是這個 output 的問題 - 當我嘗試將它用於 Pandas.to_datetime 時 - 它給了我一個錯誤:

s = pd.Series(['2021-01-01 MSK', '2021-01-02 MSK'])
ts = pd.to_datetime(s, format="%Y-%m-%d %Z")

ValueError:時間數據“2021-01-01 MSK”與格式“%Y-%m-%d %Z”不匹配(匹配)

因此,我看到了以下前進方式:

  • 要么以某種方式從我的 python 代碼中獲得完整的時區名稱Europe/Moscow而不是短MSK
  • 或使pandas.to_datetime()格式選項%Z識別時區名稱的縮寫形式MSK
  • 或者在將源字符串導入 pandas 之前以某種方式預處理源字符串(最不理想的路徑,所以我還沒有研究過)。

我有點堅持在這里選擇前進的道路。 你能給我建議哪種方式可以給我更好的代碼嗎?

我認為您可以使用Series.dt.tz_localize

from dateutil import tz

s = pd.Series(['2021-01-01', '2021-01-02'])
ts = pd.to_datetime(s, format="%Y-%m-%d").dt.tz_localize(tz.tzlocal())

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM