首页 > 解决方案 > 如何通过循环使用 Pandas DataFrame 中相邻列的平均值填充 NaN 值

问题描述

我有一个大数据集,并且我有一些缺失值,我想用前后列的平均值填充 NAN 值,在某些情况下,我有连续的 NaN 值,在这些情况下我想替换所有这些 nan例如,可以找到非 nan 的第一个值的值:我应该使用循环

   0   1     2   3     4     5   6   7  8  9  10  11    12    13  14    15    16
19.0  NaN  NaN NaN  29.0  30.0 NaN 16.0  15.0 16.0  17.0 NaN  28.0  30.0 NaN  28.0  18.0

目标是让数据看起来像这样:

 0   1     2   3     4     5   6   7  8  9  10  11    12    13  14    15    16
19.0  29.0  29.0 29.0  29.0  30.0 23.0 16.0  15.0 16.0  17.0 22.5 28.0  30.0 29  28.0  18.0

标签: pandasdataframerowsmean

解决方案


我们试试看:

# where df is not null
s = df.notna()

# check for `NaN` with valid left and right:    
mask = s.shift(1, axis=1) & s.shift(-1, axis=1)

# fill as required
df[:] = np.where(mask, df.interpolate(axis=1), df.bfill(axis=1).ffill(axis=1))

输出:

      0     1     2     3     4     5     6     7     8     9    10    11  \
0  19.0  29.0  29.0  29.0  29.0  30.0  23.0  16.0  15.0  16.0  17.0  22.5   

     12    13    14    15    16  
0  28.0  30.0  29.0  28.0  18.0  

推荐阅读