Numpy和Pandas插值也改变了原来的d

2024-04-18 12:11:48 发布

您现在位置:Python中文网/ 问答频道 /正文

我正试着为缺失的几天插入数据。原始数据为

2012-06-27 00:00:00 17
2012-06-27 01:00:00 17
2012-06-27 02:00:00 18
2012-06-27 03:00:00 18
2012-06-27 04:00:00 19
2012-06-27 05:00:00 20
2012-06-27 06:00:00 22
2012-06-27 07:00:00 23
2012-06-27 08:00:00 25
2012-06-27 09:00:00 27
2012-06-27 10:00:00 27
2012-06-27 11:00:00 29
2012-06-27 12:00:00 29
2012-06-27 13:00:00 30
2012-06-27 14:00:00 30
2012-06-27 15:00:00 29
2012-06-27 16:00:00 28
2012-06-27 17:00:00 26
2012-06-27 18:00:00 25
2012-06-27 19:00:00 24
2012-06-27 20:00:00 23
2012-06-27 21:00:00 23
2012-06-27 22:00:00 16
2012-06-27 23:00:00 15
2012-06-29 00:00:00 15
2012-06-29 01:00:00 16
2012-06-29 02:00:00 16
2012-06-29 03:00:00 16
2012-06-29 04:00:00 17
2012-06-29 05:00:00 17
2012-06-29 06:00:00 18
2012-06-29 07:00:00 19
2012-06-29 08:00:00 20
2012-06-29 09:00:00 22
2012-06-29 10:00:00 22
2012-06-29 11:00:00 22
2012-06-29 12:00:00 22
2012-06-29 13:00:00 22
2012-06-29 14:00:00 22
2012-06-29 15:00:00 22
2012-06-29 16:00:00 21
2012-06-29 17:00:00 19
2012-06-29 18:00:00 17
2012-06-29 19:00:00 16
2012-06-29 20:00:00 15
2012-06-29 21:00:00 14
2012-06-29 22:00:00 14
2012-06-29 23:00:00 13

正如你所看到的2014-12-28不见了,所以我试着用Numpy和Pandas来插值。 对于Numpy,代码是

def inter_lin_nan(ts_temp, rule):
ts_temp = ts_temp.resample(rule)
mask = np.isnan(ts_temp)
# interpolling missing values
ts_temp[mask] = np.interp(np.flatnonzero(mask), np.flatnonzero(~mask),ts_temp[~mask])
return(ts_temp)

我曾经和熊猫在一起

df_temp=df_temp.asfreq('1h')
df_temp['Temp2'] = df_temp['temp'].interpolate(method='linear')

问题是,这两种方法都会对缺失的一天进行插值,但它们也会更改2014-12-29的原始数据。你知道为什么会这样吗?还是我错过了什么?你知道吗


Tags: 数据代码numpypandasdf原始数据defnp
1条回答
网友
1楼 · 发布于 2024-04-18 12:11:48

我无法重现该问题,但这对我很有效(假设您的数据帧是按datetime索引的):

df_resampled = df.resample('1H').interpolate(method='linear')

输出:

enter image description here

如您所见,在有数据的日子里,行完全重叠:没有“更改”原始数据。插值似乎也有意义,在这个图中,原始序列中的缺失值被设置为0,以便进行比较。你知道吗

相关问题 更多 >