Python 如何按小时使用线性插值对数据帧重新采样

Python 如何按小时使用线性插值对数据帧重新采样,python,pandas,indexing,dataframe,Python,Pandas,Indexing,Dataframe,所以,这个问题已经得到了某种程度的回答,除了小时标记有点挑战性,而且我在尝试返回日期时间时遇到了一个问题。所以,基本上我有一个数据帧,看起来像这样: 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-

所以,这个问题已经得到了某种程度的回答,除了小时标记有点挑战性,而且我在尝试返回日期时间时遇到了一个问题。所以,基本上我有一个数据帧,看起来像这样:

                     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\u time
和其他迭代,以及
dftemp01.index.to\u pydatetime()
。这些都不起作用。

因此,我在尝试了一些之后解决了这个问题。这不是最漂亮的编码,但无论采样时间如何,它都能解决采样问题,从而使采样反映(据所知)数据的外观:

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秒进行插值和重新采样可能会让您在数据大小方面感到头疼。我不知道如何解决这个问题。谢天谢地,我的数据不需要它。如果有人对如何解决这个问题感兴趣,我可以试着在接下来的几周内想出一个办法。

因此,我在尝试了几次之后解决了这个问题。这不是最漂亮的编码,但无论采样时间如何,它都能解决采样问题,从而使采样反映(据所知)数据的外观:

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秒进行插值和重新采样可能会让您在数据大小方面感到头疼。我不知道如何解决这个问题。谢天谢地,我的数据不需要它。如果有人对如何解决这个问题感兴趣,我可以试着在接下来的几周内想出一个办法