我有兩個資料時間物件,我想把它們減掉--但是它們都需要采用相同的格式
我試圖轉換datetime64[ns, pytz.FixedOffset(-240)](東部時區),但是我遇到了錯誤。另一個資料時間物件是datetime64[ns],它已經在EST時區了
1) df['date'].strftime('%Y-%m-%d %H:%M:%S')
錯誤。'Series' object沒有屬性'strftime'。
2) df['date'].replace(tzinfo=None)
錯誤:replace()得到一個意外的關鍵字引數'tzinfo'。
3) df['date'].dt_tz.replace(tzinfo=None)
錯誤。'Series' object沒有屬性'dt_tz'。
uj5u.com熱心網友回復:
在pandas中,如果你有混合的時區或UTC偏移,你將得到
TypeError。DatetimeArray減法必須有相同的時區或沒有時區型別錯誤:DatetimeArray減法必須有相同的時區或沒有時區
當試圖計算一個timedelta時。這個錯誤基本上告訴你如何避免它:把所有東西都轉換為相同的tz,例如:
import pandas as pd df = pd.DataFrame({ 'date0': pd.to_datetime(["2021-08-01 00:00 -04:00"]), # should be US/Eastern。 'date1': pd.to_datetime(["2021-08-01 01:00"]) # 也應該是美國/東部。 }) # date0 date1 # 0 2021-08-01 00:00:00-04:00 2021-08-01 01:00:00 # date0已經有一個UTC偏移,但我們可以設定一個合適的時區: df['date0'] = df['date0'].dt.tz_convert('美國/紐約') # date1是天真的,即沒有時區,所以我們需要進行本地化處理:。 df['date1'] = df['date1'].dt.tz_localize('美國/紐約') # 因為現在兩個日期列都有相同的時區,我們可以計算出: print(df['date1'] - df['date0'] ) # 0 0天 01:00:00) # dtype: timedelta64[ns]Python的datetime并不那么挑剔,你可以輕松地從不同時區的datetime物件中計算出timedelta:
from datetime import datetime from zoneinfo import ZoneInfo # Python 3.9 d0 = datetime(2021, 1, 1, tzinfo=ZoneInfo("UTC") d1 = datetime(2020, 12, 31, 20, tzinfo=ZoneInfo('America/New_York') print(d1-d0) # 1:00:00。請記住,Python 的 timedelta 算術是墻時算術;你可以做一些奇怪的事情,比如這個。因此,我想說的是,有時情況并不明顯。
uj5u.com熱心網友回復:
雖然@MrFuppes的回答對一般情況很詳細,因為我的一個資料框架已經是tz格式,我不得不采取以下步驟,這很有效
。初始 format datetime64[ns, pytz.FixedOffset(-240)] (東部時區) 1) 采取的步驟 pd.to_datetime((df['date']).dt.tz_convert('US/Eastern') 初始格式 datetime64[ns] 2) 采取的措施 pd.to_datetime((df['date1']).dt.tz_localize('US/Eastern')這兩步為我帶來了相同格式的日期時間,以便我進行算術運算
。轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/328873.html
標籤:
上一篇:Laravel--將mysql的日期時間轉換為after格式
下一篇:基于當前時間的Mongodb查詢
