[英]Converting from UTC timestamp to local time using a given “Timezone” string
我在 pandas dataframe、UTC 時間戳和用戶數據的“時區”中有兩列數據。 我正在嘗試為該用戶的“本地”時間戳創建一列。 例如,我有一個 UTC 時間戳: 2019-10-27 17:18:31.034
,對應的時區為"Timezone:"Asia/Singapore"
。我想創建一個新列,為該人提供亞洲的時間戳新加坡時區,所以我可以分析事件發生的時間。還有很多其他時區,例如美國/紐約、美國/芝加哥等。
有沒有辦法有效地做到這一點? 我在數據集中只有超過 200 萬行。
示例數據如下:
Event Timestamp | Timezone | Local Time
2019-10-23 18:48:36.291 | Timezone:"America/Anchorage" | ''
2019-10-04 07:55:34.964 | Timezone:"Asia/Jerusalem" | ''
預計 output 將在該時區為事件時間戳生成本地時間列。 如前所述,事件時間戳采用 UTC。
我現在將本地時間作為 UTC 時間 + 或 - 轉換它的小時數。 如何讓新的本地列僅讀取為本地時間戳?
當前數據:
Event Timestamp | Timezone | Local Time
2019-10-23 18:48:36.291 | Timezone:"America/Anchorage" | '2019-10-23 18:48:36.291000-08:00'
預期 Output:
Event Timestamp | Timezone | Local Time
2019-10-23 18:48:36.291 | Timezone:"America/Anchorage" | '2019-10-23 10:48:36.291000'
這是一個解決方案,從原來的dataframe開始:
源數據:
Event Timestamp | Timezone | Local Time
2019-10-23 18:48:36.291 | Timezone:"America/Anchorage" | ''
2019-10-04 07:55:34.964 | Timezone:"Asia/Jerusalem" | ''
代碼:
def get_localtime(row):
ts = row["Event Timestamp"]
tz = row["Timezone"]
return ts.astimezone(tz)
df["Timezone"] = df.Timezone.str.replace("Timezone:\"", "").str.replace('"', "")
df["Event Timestamp"] = pd.to_datetime(df["Event Timestamp"])
df["Event Timestamp"] = pd.Series(df.set_index("Event Timestamp").index.tz_localize("utc"))
df["Local Time"] = df.apply(get_localtime, axis = 1)
結果:
Event Timestamp Timezone Local Time
0 2019-10-23 18:48:36.291000+00:00 America/Anchorage 2019-10-23 10:48:36.291000-08:00
1 2019-10-04 07:55:34.964000+00:00 Asia/Jerusalem 2019-10-04 10:55:34.964000+03:00
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.