pandas fillna()无法正常工作

时间:2016-12-19 08:30:37

标签: python pandas numpy

我正在尝试构建一个简单的函数来填充pandas列 一些分布,但它无法填满整个表格(df在fillna之后仍然有NaN ......)

def simple_impute_missing(df):
    from numpy.random import normal
    rnd_filled = pd.DataFrame( {c : normal(df[c].mean(), df[c].std(), len(df))
                                  for c in df.columns[3:]})

    filled_df = df.fillna(rnd_filled)       
    return filled_df

但是返回的df仍然有NaN!

我已经检查过以确保rnd_filled已满且形状正确。 发生了什么事?

1 个答案:

答案 0 :(得分:1)

我认为您需要从[:3]移除df.columns[3:]以选择df的所有列。

样品:

df = pd.DataFrame({'A':[1,np.nan,3],
                   'B':[4,5,6],
                   'C':[np.nan,8,9],
                   'D':[1,3,np.nan],
                   'E':[5,np.nan,6],
                   'F':[7,np.nan,3]})

print (df)
     A  B    C    D    E    F
0  1.0  4  NaN  1.0  5.0  7.0
1  NaN  5  8.0  3.0  NaN  NaN
2  3.0  6  9.0  NaN  6.0  3.0

rnd_filled = pd.DataFrame( {c : normal(df[c].mean(), df[c].std(), len(df))
                                  for c in df.columns})

filled_df = df.fillna(rnd_filled)       
print (filled_df)
          A  B         C         D         E         F
0  1.000000  4  6.922458  1.000000  5.000000  7.000000
1  2.277218  5  8.000000  3.000000  5.714767  6.245759
2  3.000000  6  9.000000  0.119522  6.000000  3.000000