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

标签 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)为间隔对该数据进行重新采样,例如 18 小时和 00 分钟的数据是缺失,我将其替换为 00 分钟前后五分钟范围内最接近的数据。在此示例中,我的时间 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

如果我在 00 分钟之后或之前的五分钟间隔内没有数据,我不会完成丢失的数据,使该小时带有 NaN,如下所示:

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.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')

最佳答案

我们来试试 merge_asof添加了新的 pandas 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_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          

关于python - Pandas - 以 3 小时的间隔对非正则化数据的一分钟间隔进行重新采样,并用一定时间范围内的数据替换丢失的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43588138/

相关文章:

python - Scrapy xpath 不起作用(也许是 parbase 的东西?)

Python Pandas 使用列名称列表索引数据框

带有变量的 Python pandas ISIN

python - 数据框按大小分组到嵌套字典(多个层次结构)

pandas - 如何将数据框的单个值除以每月平均值?

python - 名称错误 : name 'StaticLiveServerCase' is not defined

python - 如何在 python 中为子图运行智能循环

python - 如何在 pandas 中沿着时间戳对总和进行分组?

python - 将 pandas 的元组列转换为 MultiIndex

python - 在 for 循环中附加数据框