使用给定的“ Timezone”字符串将UTC时间戳转换为本地时间

时间:2020-06-09 14:43:27

标签: python pandas datetime

我在熊猫数据框中有两列数据,UTC时间戳和用于用户数据的“时区”。我正在尝试为该用户的“本地”时间戳创建一列。例如,我有一个UTC时间戳:2019-10-27 17:18:31.034,对应的时区为"Timezone:"Asia/Singapore"。我想创建一个新列,为该人员提供亚洲新加坡时区的时间戳,以便我可以分析事件发生的时间。还有很多其他时区,例如America / New_York,America / Chicago等。

有没有办法有效地做到这一点?我的数据集中只有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" | ''

预期的输出将为该时区的事件时间戳生成本地时间列。如前所述,事件时间戳记采用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'  

预期输出:

Event Timestamp | Timezone | Local Time  
2019-10-23 18:48:36.291 | Timezone:"America/Anchorage" | '2019-10-23 10:48:36.291000'  

1 个答案:

答案 0 :(得分:0)

这是一个解决方案,从原始数据帧开始:

源数据:

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