我在熊猫数据框中有两列数据,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'
答案 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