簡體   English   中英

使用給定的“時區”字符串從 UTC 時間戳轉換為本地時間

[英]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.

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