2016-07-05 48 views
1

所以,這個問題已經有所回答了,只不過它在小時標記方面更具挑戰性,而且我一直遇到試圖返回日期時間的問題。所以,基本上我有一個數據幀,看起來像這樣:如何用小時線性插值重新採樣數據幀

     elev Dewpoint Temp 
time          
2014-06-28 12:13:33 1125.0  7.222222 
2014-06-28 12:28:33 1125.0  7.222222 
2014-06-28 12:43:33 1125.0  7.222222 
2014-06-28 12:58:33 1125.0  7.222222 
2014-06-28 13:13:33 1125.0  6.666667 
2014-06-28 13:28:33 1125.0  6.666667 
2014-06-28 13:43:33 1125.0  7.222222 
2014-06-28 13:58:33 1125.0  7.222222 
2014-06-28 14:13:33 1125.0  6.666667 
... 
2014-08-31 11:02:14 1125.0  10.555556 
2014-08-31 11:17:13 1125.0  11.111111 
2014-08-31 11:17:14 1125.0  10.555556 
2014-08-31 11:32:13 1125.0  10.555556 
2014-08-31 11:47:13 1125.0  10.000000 
2014-08-31 11:47:14 1125.0  10.000000 

而且我想這是小時爲單位,在一個小時,這樣我可以把它比作是隻按小時測量數據的一些理論數據。

我曾嘗試使用下面的代碼來解決我的困境:

dftemp01=df00.resample(rule='1H',closed='left').last().reset_index().fillna(method='ffill') 
dftemp02=df00.resample(rule='1H',closed='left').first().reset_index().fillna(method='ffill') 
dt0=dftemp01.datetime-dftemp02.datetime 
df00['Observed']=dftemp01+dt0*dftemp02 

哪裏df00是上述數據幀。我稍後將其餘的數據框放在一行中,這很好。但是,我遇到了兩個問題。

1)我不認爲這是做我想做的。我特別想要的是例如13:00的小時,12:58的點,然後線性地向前移動2分鐘,沿着由先前點減去的下一個點確定的線,除以二。

2)我沒有從dftemp01.datetime得到任何回報。我已嘗試dftemp01.date_time和其他迭代,以及dftemp01.index.to_pydatetime()。這些都沒有奏效。

回答

0

所以,我在一些嘗試後解決了這個問題。這還不是最美麗的編碼,但它確實工作,以解決採樣問題,無論採樣時間,使採樣反映(以最好給出的知識)的數據應該是什麼樣子:

lfile00=path0+dewpointstring+filetype0 
df00=xselect(lfile00,v00,starttime,endtime) 
df00[v00]=((df00[v00]-32.)*5./9.) 
dsll=xr.open_dataset(lfile00) 
dftemp0=df00[v00].resample('S').mean() 
dftemp0=dftemp0.interpolate() 
df00=df00.resample('H').mean() 
df00['Observed']=dftemp0.resample('H').mean() 
df00=df00.drop(['elev',v00],1) 

要警告;然而,如果你的數據幀很大(如超過幾個月),插值和1秒間隔的重採樣可能最終會讓你對數據大小感到頭疼。我不知道如何解決這個問題。謝天謝地,我的數據並不需要它。如果有人對如何解決這個問題感興趣,我可以嘗試在接下來的幾周內想出一個辦法。