【问题标题】:Pandas datetime tz-aware [duplicate]Pandas datetime tz-aware [重复]
【发布时间】:2021-01-29 20:45:21
【问题描述】:

我正在使用 pandas,其中一列是年份和时间结构。类似的东西

2017-10-06T00:00:00+00:00

至少在开始时,我认为我从未为其分配过时区。而当前的 'dtype' 是 'object'

但是,如果我尝试使用设置时区

data[datetime] = pd.to_datetime(data[datetime], errors='coerce', yearfirst=True).dt.tz_localize('UTC')

弹出一个错误提示“已经 tz-aware,使用 tz_convert 进行转换。”

我的问题是,它最初是“对象”,它怎么能被 tz 感知?如果它是 tz 感知的,它使用的是哪个时区?如果我使用 tz_convert,它会改变列中的值吗?

因为我有另一个可以毫无问题地使用 tz_localize('UTC') 的数据框。而且我想比较这两个数据帧,所以如果我使用 tz_convert('UTC'),我不希望第一个数据帧的值更改为其他值。

【问题讨论】:

    标签: python pandas datetime


    【解决方案1】:

    如果您的日期时间是 UTC,那么您就完成了!对于像“2017-10-06T00:00:00+00:00”这样的文本,“+00:00”意味着这已经在 UTC 时区。

    如果您知道这是不正确的,因为正如您所说,“不要以为我曾经为它分配过时区。”您可以删除此本地化以使时区“幼稚”

    df.index
    Out[2]: DatetimeIndex(['2017-10-06 00:00:00+00:00'], dtype='datetime64[ns, UTC]', freq=None)
    
    df.index.tz_localize(None)
    Out[3]: DatetimeIndex(['2017-10-06'], dtype='datetime64[ns]', freq=None)
    

    现在它没有本地化,你可以设置一个新的时区,现在转换到它所属的地方。

    df.index.tz_localize('America/New_York')
    Out[8]: DatetimeIndex(['2017-10-06 00:00:00-04:00'], dtype='datetime64[ns, America/New_York]', freq=None)
    
    df.index.tz_localize('America/New_York').tz_convert('UTC')
    Out[9]: DatetimeIndex(['2017-10-06 04:00:00+00:00'], dtype='datetime64[ns, UTC]', freq=None)
    

    【讨论】:

      猜你喜欢
      • 2021-02-04
      • 2020-04-10
      • 2017-01-31
      • 2019-07-06
      • 2020-12-01
      • 2020-05-01
      • 2020-01-22
      • 2019-10-29
      • 1970-01-01
      相关资源
      最近更新 更多