用月平均值填补数据空白(Python)
我有一个非常长的时间序列超过10年的半小时测量作为Csv文件。测量设备时不时地出现故障。我想用月平均值或移动平均值(忽略缺失值)来插值这一差距。我想我需要一个for循环来完成这项工作,但我不知道该怎么做。有人能帮我吗? 我的数据如下所示:用月平均值填补数据空白(Python),python,for-loop,pandas,average,interpolation,Python,For Loop,Pandas,Average,Interpolation,我有一个非常长的时间序列超过10年的半小时测量作为Csv文件。测量设备时不时地出现故障。我想用月平均值或移动平均值(忽略缺失值)来插值这一差距。我想我需要一个for循环来完成这项工作,但我不知道该怎么做。有人能帮我吗? 我的数据如下所示: 10-Oct-2010 21:15 0.00271 10-Oct-2010 21:45 0.00408 10-Oct-2010 22:15 -0.00228 10-Oct-2010 22:45 0.00433 10-Oct-2010 23:15
10-Oct-2010 21:15 0.00271
10-Oct-2010 21:45 0.00408
10-Oct-2010 22:15 -0.00228
10-Oct-2010 22:45 0.00433
10-Oct-2010 23:15 0.00421
10-Oct-2010 23:45 0.00224
11-Oct-2010 00:15 -0.01678
11-Oct-2010 00:45 -0.00059
11-Oct-2010 01:15 -0.00371
11-Oct-2010 01:45 0.01353
11-Oct-2010 02:15 0.00108
11-Oct-2010 02:45 0.00101
11-Oct-2010 03:15 -0.00159
11-Oct-2010 03:45 0.0011
我目前的代码是:
import pandas as pd
ts = pd.read_csv('C:\Python27\Scripts\ET_T_2000.csv', sep=';', parse_dates=[['date', 'time']])
ts1 = ts.set_index('date_time')['ET'].resample('D', how='sum')
ts1.to_csv('sum.csv')
所以我得到了蒸发数据的每日总和。我也可以对每月-每日平均值进行重采样,但我不知道如何告诉Python它需要为每个间隔使用这个特定月份的平均值。如果您在元组的列表(唉,您没有说明您的数据结构)
(时间戳,值)
:
如果您在元组的列表(唉,您没有说明您的数据结构)中有您的值
(时间戳,值)
:
如果您在元组的列表(唉,您没有说明您的数据结构)中有您的值
(时间戳,值)
:
如果您在元组的列表(唉,您没有说明您的数据结构)中有您的值
(时间戳,值)
:
注意:这应该是一个评论,但我没有它的代表:)
Pandas在序列和数据帧上都有一个很好的“插值”函数:()。我将建议,特别是如果您有“几天”的数据丢失,您只需将值保留为NaNs()。Pandas非常支持使用NA值的绘图,看到具有正确测量值的绘图,然后“间隙”很容易解释。此外,这种方法还提供了额外的信息,比如说,您正在查看图表,您看到周末的间隙比其他日子多,这可能表明测量设备在周末(或其他任何时候)不太稳定。注意:这应该是一个评论,但我没有代表:)
Pandas在序列和数据帧上都有一个很好的“插值”函数:()。我将建议,特别是如果您有“几天”的数据丢失,您只需将值保留为NaNs()。Pandas非常支持使用NA值的绘图,看到具有正确测量值的绘图,然后“间隙”很容易解释。此外,这种方法还提供了额外的信息,比如说,您正在查看图表,您看到周末的间隙比其他日子多,这可能表明测量设备在周末(或其他任何时候)不太稳定。注意:这应该是一个评论,但我没有代表:)
Pandas在序列和数据帧上都有一个很好的“插值”函数:()。我将建议,特别是如果您有“几天”的数据丢失,您只需将值保留为NaNs()。Pandas非常支持使用NA值的绘图,看到具有正确测量值的绘图,然后“间隙”很容易解释。此外,这种方法还提供了额外的信息,比如说,您正在查看图表,您看到周末的间隙比其他日子多,这可能表明测量设备在周末(或其他任何时候)不太稳定。注意:这应该是一个评论,但我没有代表:)
Pandas在序列和数据帧上都有一个很好的“插值”函数:()。我将建议,特别是如果您有“几天”的数据丢失,您只需将值保留为NaNs()。Pandas非常支持使用NA值的绘图,看到具有正确测量值的绘图,然后“间隙”很容易解释。另外,这种方法提供了额外的信息,比如说,你正在查看图表,你看到周末的间隙比其他日子多,这可能表明测量设备在周末(或其他任何时候)不太稳定。由于缺失值的间隙如此之大,我想你最好将它们保留为NaN,并调整您的计算,使其能够处理丢失的数据。看起来你正在用它进行金融模拟,从长远来看,如果你修改实际的原始数据,它总是会适得其反。如果您使用Numpy进行计算,则会添加一组修改过的函数,这些函数会跳过数组中的NAN值,例如,在计算平均值等时。最好继续 有这么大的缺失值的差距,我想你真的更好了,把它们保留为NaN,调整你的计算,让它们能够处理缺失的数据。看起来你正在用它进行金融模拟,从长远来看,如果你修改实际的原始数据,它总是会适得其反。如果您使用Numpy进行计算,则会添加一组修改过的函数,这些函数会跳过数组中的NAN值,例如,在计算平均值等时。最好继续 有这么大的缺失值的差距,我想你真的更好了,把它们保留为NaN,调整你的计算,让它们能够处理缺失的数据。看起来你正在用它进行金融模拟,从长远来看,如果你修改实际的原始数据,它总是会适得其反。如果您使用Numpy进行计算,则会添加一组修改过的函数,这些函数会跳过数组中的NAN值,例如,在计算平均值等时。最好继续 有这么大的缺失值的差距,我想你真的更好了,把它们保留为NaN,调整你的计算,让它们能够处理缺失的数据。看起来你正在用它进行金融模拟,从长远来看,如果你修改实际的原始数据,它总是会适得其反。如果您使用Numpy进行计算,则会添加一组修改过的函数,这些函数会跳过数组中的NAN值,例如,在计算平均值等时。最好继续 无论做什么,都要更改源数据:始终保持原始数据的原样 然后,数据的任何使用者都可以决定特定的i
data = [ (1, 3.), (2, 5.), (3, 0.), (6, 3.), (7, 3.), (9, 2.), (10, 0.) ]
timestampDistance = 1
def interpolateGap(ts0, v0, ts1, v1):
count = (ts1 - ts0) / timestampDistance
return [ (ts0 + i * timestampDistance, v0 + (v1 - v0) * i / count)
for i in range(1, count) ]
def fillGap(data, pos, ts0, v0, ts1, v1):
data[pos+1:pos] = interpolateGap(ts0, v0, ts1, v1)
for i in range(len(data)-1, 1, -1):
timestamp, value = data[i]
previousTimestamp, previousValue = data[i-1]
if previousTimestamp + timestampDistance < timestamp:
fillGap(data, i-1, previousTimestamp, previousValue, timestamp, value)
print data
[(1, 3.0), (2, 5.0), (3, 0.0), (4, 1.0), (5, 2.0), (6, 3.0), (7, 3.0), (8, 2.5), (9, 2.0), (10, 0.0)]