所以,这已经得到了一定程度的回答,除了它对小时标记更具挑战性,我一直遇到试图返回日期时间的问题。所以,基本上我有一个如下所示的数据框:
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。
2)我没有收到dftemp01.datetime
的任何回复。我尝试了dftemp01.date_time
和其他迭代,以及dftemp01.index.to_pydatetime()
。这些都没有用。
答案 0 :(得分: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秒间隔的内插和重采样最终可能会让您对数据大小感到头疼。我不知道如何解决这个问题。谢天谢地,我的数据不需要它。如果有人对如何解决这个问题感兴趣,我可以尝试在未来几周内找到一种方法。