【问题标题】:Localise pandas timestamps with no DST transistion在没有 DST 转换的情况下本地化 pandas 时间戳
【发布时间】:2019-03-19 06:00:40
【问题描述】:

我正在尝试从设备生成的文件中导入 CSV 数据,该设备的系统时钟设置为 'Australia/Adelaide' 时间,但不会在夏季从标准时间切换到夏令时。我可以将它作为tz-naive 导入没有问题,但我需要将它与tz-aware 的数据相关联。

以下是不正确的,因为它假设数据在 '2017-10-01' 转换到夏令时

data = pd.read_csv('~/dev/datasets/data.csv', parse_dates=['timestamp'], index_col=['timestamp'])
data.index.tz_localize('Australia/Adelaide')

tz_localize 包含许多处理模糊日期的参数 - 但我看不出有任何方法可以告诉它数据根本没有转换。有没有办法指定 'Australia/Adelaide', no daylight savings 的“自定义”时区?

编辑:我发现了这个问题 - Create New Timezone in pytz 这给了我一些想法 - 在这种情况下,时间戳是与 UTC 的恒定偏移量,因此我可以在导入后将其添加到日期,本地化为 UTC 然后转换为'澳大利亚/阿德莱德”。我会回来报告的……

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    我想出的解决方案如下:

    由于数据是没有 DLS 转换的“澳大利亚/阿德莱德”,这意味着 UTC 偏移量全年都是一个常数 (+10:30)。因此,解决方案是将数据导入为tz-naive,减去 10 小时 30 分钟,本地化为 UTC,然后转换为“澳大利亚/阿德莱德”,即

    data = pd.read_csv('~/dev/datasets/data.csv', parse_dates=['timestamp'], index_col=['timestamp'])
    data.index = data.index - pd.DateOffset(hours=10) - pd.DateOffset(minutes=30)
    data.index = data.index.tz_localize('UTC').tz_convert('Australia/Adelaide')
    

    【讨论】:

      猜你喜欢
      • 2018-06-27
      • 2020-05-10
      • 2015-04-20
      • 2021-12-14
      • 1970-01-01
      • 2021-04-01
      • 2020-02-25
      • 2019-01-05
      • 2019-04-30
      相关资源
      最近更新 更多