2017-04-24 38 views
2

與數據替換丟失的數據I具有非regulirased數據在這樣一分鐘的間隔:熊貓 - 重新取樣非正規化數據一個分鐘間隔在3個小時的間隔和在一個時間範圍

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 

我想在,例如,如果在18小時和00分鐘的數據缺失的方式來重新取樣該數據爲3小時(0,3,6,9,12,15,18,21)的間隔,我用在00分鐘之後或之前五分鐘範圍內最近的數據替換它。在這個例子中,我的17 57的時間接近18比00 18 04,所以我用的17 57這樣的數據替換數據丟失時間18 00:

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 

我試圖與.resample做到這一點('3H:後或00分鐘之前,我沒有完成丟失的數據離開小時與南這樣有五分鐘的時間間隔數據')熊貓命令,但我不知道如何去做,用5分鐘範圍內最近的數據替換缺失的值。

我嘗試使用np.searchshorted但我不能夠建立與它五分鐘範圍內,所以我放棄這個想法。

我的代碼現在的問題是很簡單的,我只是讀取數據的文本文件,並重新取樣,在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') 

回答

1

讓我們嘗試merge_asof一個新的大熊貓0.19.0增加。您將不得不使用您在此處提供的更多輸入數據對此進行測試。但這是一種方法。

一定要在你原來的DF你的「日期」字段是datetime數據時

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_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   
1

感謝您的幫助和抱歉在回答延遲。你的答案幫了我很多,但是由於我的數據我不得不做出一些改變。最後,我的代碼如下(您可以看到更改間隔的範圍爲3分鐘而不是5):

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 = False, date_parser = dateparse) 
vento1 = vento.rename(columns={'Dia_Mes_Ano_Hora_Minuto': 'Data'}) 
vento_time = pd.DataFrame({'Data':pd.date_range(start='2016-07-12 18:00:00',end='2017-02-28 21:00:00',freq='3H')}) 
vento_2 = pd.merge_asof(vento_time,vento1, on='Data',tolerance=pd.Timedelta("3 minutes")).fillna('NAN') 
vento_3 = vento_2.convert_objects(convert_numeric=True) 
vento_3.set_index(['Data'], inplace=True) 
vento_3.to_csv('vento_3min.csv') 
相關問題