Pandas系列扩展了填充随机平均值

时间:2017-06-21 10:10:24

标签: pandas random series reindex

我正在努力收集一年中每个小时的温度。在一些报废之后,我几乎所有的临时值都达到了几个小时但不幸的是,有些数据丢失了,总数只有8600而不是2016年的8783就像小时一样。不幸的是,我不知道临时数据丢失的具体时间。因此,我必须完成临时数据,直到2016年所有相应的值都达到小时数。有没有办法在随机基础上插入临时值系列,插入接近我原有的值。

当我使用pd.concat()时,由于temp(8600)中的行数较少,所有直到8783个索引(在临时列中)的行都会填充NaN。

df = pd.concat([date_df, temp_df], axis =1)
Output:

datetime                  |     temp
0 2016-01-01 01:00:00           -6°C
1 2016-01-01 02:00:00           -6°C
2 2016-01-01 03:00:00           -6°C
3 2016-01-01 04:00:00           -7°C

.....

8780 2016-12-31 22:00:00        NaN
8781 2016-12-31 23:00:00        NaN
8782 2017-01-01 00:00:00        NaN

因此,我可以在随机索引上添加缺少的临时值,并将它们的值与现有索引中的最接近的值相加。在此先感谢,也许力量与你同在!

1 个答案:

答案 0 :(得分:1)

您可以使用:

print (df)
            datetime    temp
2016-01-01  01:00:00   8.0°C
2016-01-01  02:00:00   7.0°C
2016-01-01  03:00:00     NaN
2016-01-01  04:00:00     NaN
2016-01-01  05:00:00   4.0°C
2016-01-01  06:00:00  10.0°C

df['temp'] = df['temp'].str.replace('°C', '').astype(float)

df['temp'] = df['temp'].interpolate().astype(str) + '°C'
print (df)
            datetime    temp
2016-01-01  01:00:00   8.0°C
2016-01-01  02:00:00   7.0°C
2016-01-01  03:00:00   6.0°C
2016-01-01  04:00:00   5.0°C
2016-01-01  05:00:00   4.0°C
2016-01-01  06:00:00  10.0°C

编辑:

#sample data
np.random.seed(54)
rng = pd.date_range('2016-01-01', freq='H', periods=100)
df = pd.DataFrame({'temp':np.random.randint(10, size=len(rng))}, index=rng)

#add 10 random NaNs
df.loc[np.random.choice(df.index, 10), 'temp'] = np.nan
print (df)
                     temp
2016-01-01 00:00:00   5.0
2016-01-01 01:00:00   2.0
2016-01-01 02:00:00   7.0
2016-01-01 03:00:00   1.0
2016-01-01 04:00:00   0.0
2016-01-01 05:00:00   NaN
2016-01-01 06:00:00   7.0
2016-01-01 07:00:00   1.0
2016-01-01 08:00:00   9.0
...
...