亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

日期時間夏令時轉換問題 [Python]

日期時間夏令時轉換問題 [Python]

慕少森 2024-01-16 15:36:50
由于上周六/周日轉換為夏令時,從 UTC 轉換為 CET 時,我的時間戳字段出現以下錯誤:AmbiguousTimeError: Cannot infer dst time from 2020-07-31 11:17:18+00:00, try using the 'ambiguous' argument#將時間戳字段轉換為 CET(歐洲、柏林)df['timestamp_berlin_time'] = df['timestamp'].dt.tz_localize('Europe/Berlin')我嘗試了以下片段:df['timestamp_berlin_time'] = df['timestamp'].dt.tz_localize('CET',ambiguous='infer')但這給了我這個錯誤:AmbiguousTimeError: 2020-07-31 11:17:18+00:00數據樣本:0  2020-07-31 11:17:18+00:001  2020-07-31 11:17:18+00:002  2020-08-31 16:26:42+00:003  2020-10-20 07:28:46+00:004  2020-10-01 22:11:33+00:00名稱:時間戳,數據類型:datetime64[ns,UTC]
查看完整描述

1 回答

?
慕田峪9158850

TA貢獻1794條經驗 獲得超7個贊

如果您的輸入是 UTC 但尚未設置 UTC,您可以先本地化為 UTC,例如:


df['timestamp'] = df['timestamp'].dt.tz_localize('UTC')

如果您的輸入已經轉換為 UTC,您可以簡單地tz_convert,例如:


s = pd.Series(pd.to_datetime(['2020-10-25 00:40:03.925000', 

                              '2020-10-25 01:40:03.925000', 

                              '2020-10-25 02:40:03.925000'], utc=True))


s.dt.tz_convert('Europe/Berlin')

# 0   2020-10-25 02:40:03.925000+02:00

# 1   2020-10-25 02:40:03.925000+01:00

# 2   2020-10-25 03:40:03.925000+01:00

# dtype: datetime64[ns, Europe/Berlin]

如果您輸入的時間戳代表當地時間(此處:歐洲/柏林時區),您可以嘗試根據順序推斷 DST 轉換:


s = pd.Series(pd.to_datetime(['2020-10-25 02:40:03.925000', 

                              '2020-10-25 02:40:03.925000', 

                              '2020-10-25 03:40:03.925000']))


s.dt.tz_localize('Europe/Berlin', ambiguous='infer')

# 0   2020-10-25 02:40:03.925000+02:00

# 1   2020-10-25 02:40:03.925000+01:00

# 2   2020-10-25 03:40:03.925000+01:00

# dtype: datetime64[ns, Europe/Berlin]

注:CET不是地理意義上的時區。由于歷史原因,pytz 可以處理其中一些,但不要指望它。無論如何,它可能會為您提供靜態 tz 偏移量 - 如果您希望它包含 DST 轉換,那么這不是您想要的。


查看完整回答
反對 回復 2024-01-16
  • 1 回答
  • 0 關注
  • 192 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號