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