在Python的Pandas中设置插值方法的条件
import numpy as np, pandas as pd
data = np.array([[[3, 2, 1, np.nan, np.nan],
[22, 1, 1, 4, 4],
[4, 2, 3, 3, 4],
[1, 1, 4, 1, 5],
[2, 4, 5, 2, 1]],
[[6, 7, 10, 6, np.nan],
[np.nan, 7, 8, 6, 9],
[6, 10, 9, 8, 10],
[6, 8, 7, 10, 8],
[10, 9, 9, 10, 8]],
[[6, 7, 10, np.nan, np.nan],
[19, 19, 8, 6, 9],
[6, 10, 9, 8, 10],
[6, 8, 7, 10, 8],
[10, 9, 9, 10, 8]],
[[6, 7, 10, 6, np.nan],
[19, 21, 8, 6, 9],
[6, 10, 9, 8, 10],
[6, 8, 7, 10, 8],
[10, 9, 9, 10, 8]],
[[12, 14, 12, 15, np.nan],
[19, 11, 14, 14, 11],
[13, 13, 16, 15, 11],
[14, 15, 14, 16, 14],
[13, 15, 11, 11, 14]]])
new_data = data.reshape(5,25)
df = pd.DataFrame(new_data)
result = df.interpolate(axis=0,method='cubic').values.reshape(data.shape)
print result
虽然有些地方有4个非空值,但整个过程还是停止了,系统提示说“立方体”方法至少需要4个非空值。我该如何设置条件,让“立方体”方法只应用于那些可以运行“立方体”方法的位置呢?
1 个回答
1
这个方法应该适合你使用(前提是每一列至少有4个有效的数据,而不是全是NaN)。
df.dropna(how='all', axis=1).interpolate(method='cubic')
这个操作会删除所有包含NaN
的行。
如果你需要恢复原来的数据结构,我建议你先保存这些列:
cols = df.columns
然后再进行插值处理。接下来再进行重新索引:
result.reindex_axis(cols, axis=1)