内插数字序列

pri*_*nce 2 python math pypy

我想完成一个不完整的数字列表,我找不到任何pythonic方法来做到这一点.我有一系列的日子从1到31,每天,我有一个浮动值.

#dictionnary{day: value}
monthvalues = {1: 1.12, 2: 3.24, 3: 2.23, 5: 2.10, 7: 4.97} etc.. to 31st day
Run Code Online (Sandbox Code Playgroud)

但我的数据不完整,有些日子不见了!因此,我希望以这种方式以数学方式填充缺失的图片:

样本月1:

{16: 2.00, 18: 4.00}
#==> I want to add to the dictionnary 17: 3.00
Run Code Online (Sandbox Code Playgroud)

样本月2:

{10: 2.00, 14: 4.00}
#==> I want to add to the dictionnary 11: 2.25, 12: 2.50, 13: 2.75
Run Code Online (Sandbox Code Playgroud)

听起来很简单,但我已经完成了数百万行来处理不完整的sql数据库,目前我对xrange()循环很有帮助......也许在数学库中有一个方法,但我找不到它.

谢谢你的帮助!

编辑: 我想插入数字,但据我所知,只有numpy/scipy有这些数学函数,我使用Pypy与numpy/scipy不兼容.

roo*_*oot 5

考虑使用pandasinterpolate方法,该方法使其变得简单:

In [502]: import pandas    

In [503]: s = pandas.Series({1: 1.12, 2: 3.24, 3: 2.23,5: 2.10,7:4.97}, index=range(1,8))

In [504]: s
Out[504]: 
1    1.12
2    3.24
3    2.23
4     NaN
5    2.10
6     NaN
7    4.97

In [505]: s.interpolate()
Out[505]: 
1    1.120
2    3.240
3    2.230
4    2.165
5    2.100
6    3.535
7    4.970
Run Code Online (Sandbox Code Playgroud)

并且有多个缺失值:

In [506]: s2 = pandas.Series({10: 2.00, 14: 4.00},index=range(10,15))

In [507]: s2
Out[507]: 
10     2
11   NaN
12   NaN
13   NaN
14     4

In [508]: s2.interpolate()
Out[508]: 
10    2.0
11    2.5
12    3.0
13    3.5
14    4.0
Run Code Online (Sandbox Code Playgroud)

如果你需要,你可以将它转换回dict:

In [511]: s2.to_dict()
Out[511]: {10: 2.0, 11: 2.5, 12: 3.0, 13: 3.5, 14: 4.0}
Run Code Online (Sandbox Code Playgroud)