我想使用三次样条函数填充DataFrame中的列中的空白项。如果我导出到列表,那么我可以使用numpy的
是否有一种方法在pandas中使用这个函数?
interp1d
函数并将其应用于缺失值。是否有一种方法在pandas中使用这个函数?
interp1d
函数并将其应用于缺失值。大多数numpy/scipy函数只需要参数是“array_like”,iterp1d
也不例外。幸运的是,Series和DataFrame都是“array_like”,因此我们无需离开pandas:
import pandas as pd
import numpy as np
from scipy.interpolate import interp1d
df = pd.DataFrame([np.arange(1, 6), [1, 8, 27, np.nan, 125]]).T
In [5]: df
Out[5]:
0 1
0 1 1
1 2 8
2 3 27
3 4 NaN
4 5 125
df2 = df.dropna() # interpolate on the non nan
f = interp1d(df2[0], df2[1], kind='cubic')
#f(4) == array(63.9999999999992)
df[1] = df[0].apply(f)
In [10]: df
Out[10]:
0 1
0 1 1
1 2 8
2 3 27
3 4 64
4 5 125
注意:我无法立即想出一个示例将DataFrame传递到第二个参数(y
)中...但这也应该可以工作。
x = df.index
,然后 pd.Series(f(x), index=x)
。 :) - Andy Hayden