簡體   English   中英

將一年中的小數部分轉換為Pandas Datetime

[英]Convert fractional day of year to Pandas Datetime

我有一個Pandas DataFrame列,它是一年中的小數日(DOY)。 此列顯示為:

               DOY
0       200.749967
1       200.791667
2       200.833367
3       200.874967
4       200.916667
5       200.958367
6       200.999967
7       201.041667
       ...    
3491    627.166667
3492    627.333367
3493    627.499967
3494    627.666667
3495    627.833367
3496    627.999967
3497    628.166667
3498    628.333367
Name: DOY, Length: 3499, dtype: float64

起始年份是2011年,但是DOY數據繼續增加到2012年的價值,而在新的一年沒有重置為零。

如何將其轉換為格式為'YYYY-MM-DD HH:MM:SS'的Pandas DatetimeIndex?

我可以想到的一種方法是將列轉換為TimeDelta ,然后將其添加到基本偏移量(2011/1/1)。

df.DOY = pd.to_datetime('2011-1-1') + pd.to_timedelta(df.DOY, unit='D')
print(df.DOY)
0      2011-07-20 17:59:57.148800
1      2011-07-20 19:00:00.028800
2      2011-07-20 20:00:02.908800
3      2011-07-20 20:59:57.148800
4      2011-07-20 22:00:00.028800
5      2011-07-20 23:00:02.908800
6      2011-07-20 23:59:57.148800 
7      2011-07-21 01:00:00.028800
       ... 
3491   2012-09-19 04:00:00.028800
3492   2012-09-19 08:00:02.908800
3493   2012-09-19 11:59:57.148800
3494   2012-09-19 16:00:00.028800
3495   2012-09-19 20:00:02.908800
3496   2012-09-19 23:59:57.148800
3497   2012-09-20 04:00:00.028800
3498   2012-09-20 08:00:02.908800
Name: DOY, dtype: datetime64[ns]

另一種方法是使用origin參數集調用pd.to_datetime ,正如agtoever在其答案中所示

雖然在將DOY轉換為Datetime時接受的答案是正確的,但是有一個小錯誤被忽略了。

任何一年的1月1日午夜都是DOY 1.0。 當您進行小數DOY時,1月1日12:00是DOY 1。1,1月2日00:00是DOY 2.0等等...

如果您將DOY時間添加到基准偏移日期,如其他答案中所建議的那樣,結果時間將向前偏移一天。 例如, pd.to_datetime('2011-01-01') + pd.to_timedelta(df.DOY, unit='D') ,DOY系列以1.0開頭,導致開始日期為'2011-01 -02'這是不正確的。 這是DOY時間以1而不是0開始的慣例的結果。有關詳細信息,請參閱此處

因此,正確的答案(產生正確的日期時間結果)是:

df.DOY = pd.to_datetime('2011-1-1') + pd.to_timedelta(gps.DOY, unit='D') - pd.Timedelta(days=1)

只需使用適當參數的to_datetime閱讀手冊 ):

>>> pandas.to_datetime([0,0.1,200,400,800], unit='D', origin=pandas.Timestamp('01-01-2011'))

DatetimeIndex(['2011-01-01 00:00:00', '2011-01-01 02:24:00', '2011-07-20 00:00:00', '2012-02-05 00:00:00', '2013-03-11 00:00:00'], dtype='datetime64[ns]', freq=None)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM