我希望使用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']。
有没有更好的方法来实现这个结果?