在scipy中插值时设置nan值

时间:2018-05-21 15:32:19

标签: python python-3.x pandas scipy

我希望使用scipy.interpolate.interp1d在输入为NAN时设置一个常量值来插入一个值列表(一个pandas'系列)。

这个的原因是我需要为插值的输出乘以另一个系列,我想乘以1是输入是NAN

现在我做了

import pandas as pd
import numpy as np
from scipy.interpolate import interp1d

X = [0,180,360]
Y = [1,10,1]
df = pd.DataFrame({'a':[1,2,3,4,5], 'b':[0,180, np.nan, 270, 999]})
interp=  interp1d(X, Y, kind='linear', bounds_error= False)
K = interp(df['b'])
K[[np.isnan(K)]] = 1
df['a'] = df['a'] * K

In [15]: df.a
Out[15]: 
0     1.0
1    20.0
2     3
3    22.0
4     5.0

然而,由于df相当大,我正在寻找更直接的东西,不需要创建变量K并用np.isnan检查向量。此外,这也会在interp1d期间产生恼人的警告。

对于插值边界以外的点我可以做

interp=  interp1d(X, Y, kind='linear', bounds_error= False, fill_value = 1)

这将允许我做

df['a'] = df['a'] * interp(df['b'])

但遗憾的是,这并没有处理" nan"在df [' b']。

有没有更好的方法来实现这个结果?

0 个答案:

没有答案