Skip to main content
 首页 » 编程设计

python之替换 pandas 数据框中的 nan

2025年05月04日23Renyi-Fan

给定数据帧 df

df = pd.DataFrame(data=[[np.nan,1], 
                  [np.nan,np.nan], 
                  [1,2], 
                  [2,3], 
                  [np.nan,np.nan], 
                  [np.nan,np.nan], 
                  [3,4], 
                  [4,5], 
                  [np.nan,np.nan], 
                  [np.nan,np.nan]],columns=['A','B']) 
 
 
df 
Out[16]:  
     A    B 
0  NaN  1.0 
1  NaN  NaN 
2  1.0  2.0 
3  2.0  3.0 
4  NaN  NaN 
5  NaN  NaN 
6  3.0  4.0 
7  4.0  5.0 
8  NaN  NaN 
9  NaN  NaN 

我需要使用以下规则替换 nan:

1) 如果 nan 在开头,则替换为 nan 之后的第一个值

2) 如果 nan 位于 2 个或更多值的中间,则将 nan 替换为这些值的平均值

3) 如果nan在最后替换为最后一个值

df 
Out[16]:  
     A    B 
0  1.0  1.0 
1  1.0  1.5 
2  1.0  2.0 
3  2.0  3.0 
4  2.5  3.5 
5  2.5  3.5 
6  3.0  4.0 
7  4.0  5.0 
8  4.0  5.0 
9  4.0  5.0 

请您参考如下方法:

使用add在正向填充值和回填值之间,然后除以 2 并 last 替换最后一个和第一个 NaNs:

df = df.bfill().add(df.ffill()).div(2).ffill().bfill() 
print (df) 
     A    B 
0  1.0  1.0 
1  1.0  1.5 
2  1.0  2.0 
3  2.0  3.0 
4  2.5  3.5 
5  2.5  3.5 
6  3.0  4.0 
7  4.0  5.0 
8  4.0  5.0 
9  4.0  5.0 

详细信息:

print (df.bfill().add(df.ffill())) 
 
     A     B 
0  NaN   2.0 
1  NaN   3.0 
2  2.0   4.0 
3  4.0   6.0 
4  5.0   7.0 
5  5.0   7.0 
6  6.0   8.0 
7  8.0  10.0 
8  NaN   NaN 
9  NaN   NaN