Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Pandas-在3小时的时间间隔内重新采样一分钟的非正则化数据,并用一定时间范围内的数据替换丢失的数据_Python_Pandas_Resampling - Fatal编程技术网

Python Pandas-在3小时的时间间隔内重新采样一分钟的非正则化数据,并用一定时间范围内的数据替换丢失的数据

Python Pandas-在3小时的时间间隔内重新采样一分钟的非正则化数据,并用一定时间范围内的数据替换丢失的数据,python,pandas,resampling,Python,Pandas,Resampling,我有一个间隔一分钟的非规范数据,如下所示: Date Vel Dir 14-11-2001 17:55:00 14.1 35 14-11-2001 17:56:00 10.4 52 14-11-2001 17:57:00 14.8 19 14-11-2001 18:04:00 11.4 54 14-11-2001 18:05:00 7.6 13 我希望以3小时(0,3,6,9,12,15,18,21)为间隔对数据进行重新采样

我有一个间隔一分钟的非规范数据,如下所示:

Date                Vel     Dir
14-11-2001 17:55:00 14.1    35
14-11-2001 17:56:00 10.4    52
14-11-2001 17:57:00 14.8    19
14-11-2001 18:04:00 11.4    54
14-11-2001 18:05:00 7.6     13
我希望以3小时(0,3,6,9,12,15,18,21)为间隔对数据进行重新采样,例如,如果18小时和00分钟的数据丢失,我将其替换为00分钟之后或之前5分钟范围内最接近的数据。在本例中,17 57的时间比18 04的时间更接近18 00,因此我将缺失时间18 00的数据替换为17 57的数据,如下所示:

14-11-2001 15:00:00 5.8     43
14-11-2001 18:00:00 14.8    19
14-11-2001 21:00:00 17.4    68
14-11-2001 15:00:00 5.8     43
14-11-2001 18:00:00 NaN     NaN
14-11-2001 21:00:00 17.4    68
如果我在00分钟之后或之前的五分钟内没有数据,我不会完成丢失的数据,将时间留给NaN,如下所示:

14-11-2001 15:00:00 5.8     43
14-11-2001 18:00:00 14.8    19
14-11-2001 21:00:00 17.4    68
14-11-2001 15:00:00 5.8     43
14-11-2001 18:00:00 NaN     NaN
14-11-2001 21:00:00 17.4    68
我正试图用pandas的.resample('3H')命令来实现这一点,但我不知道如何用五分钟内最接近的数据替换丢失的值

我尝试使用np.searchshort,但我无法用它确定五分钟的范围,所以我放弃了这个想法

我现在的代码非常简单,我只是读取一个包含数据的文本文件,并在3小时的时间间隔内对其重新采样,而不替换数据,因此当我为我的文本文件提取数据时,我的数据如下所示:

Date                Vel     Dir
14-11-2001 15:00:00 5.8     43
14-11-2001 18:00:00     
14-11-2001 21:00:00 17.4    68
代码是:

import numpy as np 
import pandas as pd
dateparse = lambda x: pd.datetime.strptime(x,'%d %m %Y %H %M')
vento= pd.read_csv('vento.txt',header=0, delim_whitespace= True, parse_dates = [['Dia', 'Mes', 'Ano', 'Hora','Minuto']], index_col = 0, date_parser = dateparse)

vento_2=vento.resample('3H')
vento_2.to_csv(r'data.txt',index=True, index_label=None, sep='\t')
让我们尝试新添加的熊猫0.19.0。您必须使用此处提供的更多输入数据对此进行测试。但这是一种方法

确保原始df中的“日期”字段是日期时间数据时间

df['Date'] = pd.to_datetime(df['Date'])
让我们手动创建大约三个小时的时间段:

df_time = pd.DataFrame({'Date':pd.date_range(start='2001-11-14',end='2001-11-15',freq='3H')})
使用
merge\u asof
,公差为5分钟

df_new = pd.merge_asof(df_time,df, on='Date',tolerance=pd.Timedelta("5 minutes")).fillna('')

print(df_new)
输出:

                 Date   Vel Dir
0 2001-11-14 00:00:00          
1 2001-11-14 03:00:00          
2 2001-11-14 06:00:00          
3 2001-11-14 09:00:00          
4 2001-11-14 12:00:00          
5 2001-11-14 15:00:00          
6 2001-11-14 18:00:00  14.8  19
7 2001-11-14 21:00:00          
8 2001-11-15 00:00:00          

谢谢你的帮助,很抱歉延迟回复。你的回答对我帮助很大,但由于我的数据,我不得不做一些修改。最后,我的代码如下(您可以看到间隔的范围从5分钟改为3分钟):