【问题标题】:Converting from UTC timestamp to local time using a given "Timezone" string使用给定的“时区”字符串从 UTC 时间戳转换为本地时间
【发布时间】:2020-09-28 18:53:59
【问题描述】:

我在 pandas 数据框中有两列数据,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'  

【问题讨论】:

  • 请添加示例数据以及预期输出
  • 查看数据会有帮助,请在您的问题中粘贴您的 DataFrame 示例
  • 这能回答你的问题吗? Efficiently convert timezones in pandas dataframe
  • 我发布了更新。我能够将本地时间作为 UTC 时间戳 + 或 - 小时,但不能作为本地时间戳。有关当前数据和预期输出,请参见上文。

标签: python pandas datetime


【解决方案1】:

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

来源数据:

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  

【讨论】:

    猜你喜欢
    • 2019-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-15
    • 2015-12-19
    • 2015-04-20
    • 2014-12-10
    相关资源
    最近更新 更多