在Python的Pandas中设置插值方法的条件

1 投票
1 回答
804 浏览
提问于 2025-04-18 05:13
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)

撰写回答