繁体   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