在熊猫数据框中替换nan

时间:2018-02-26 13:26:52

标签: python pandas dataframe

给出数据帧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

1 个答案:

答案 0 :(得分:5)

在前向填充和回填值之间使用add,然后除以2并最后替换最后一个NaN s:

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