Python如何使用bfill方法填充自定义值(例如" #NA ####')?

时间:2017-12-20 02:02:57

标签: python pandas missing-data

我有一个包含" #NA ####"的数据框。我想用组均值来回填这个值。

我知道我可以先替换#34; #NA ####"使用np.NAN,然后使用pd.fillna,但还有更方便的方法吗?

1 个答案:

答案 0 :(得分:0)

<强>设置

df

  Group   Value
0      1      10
1      1  #NA###
2      3       5
3      2      10
4      2  #NA###
5      3  #NA###
6      1      40
7      2  #NA###
8      3     100
9      1      20

调用pd.to_numeric,将这些字符串强制转换为NaN。

df.Value = pd.to_numeric(df.Value, errors='coerce')

现在,按Group分组,并使用fillna致电mean -

df = df.set_index('Group').Value\
       .fillna(df.groupby('Group').mean().Value)\
       .reset_index()
df

   Group       Value
0      1   10.000000
1      1   23.333333
2      3    5.000000
3      2   10.000000
4      2   10.000000
5      3   52.500000
6      1   40.000000
7      2   10.000000
8      3  100.000000
9      1   20.000000

我认为非常好的替代填充方法(来自现已删除的答案)涉及groupby + transform -

df.Value = df.Value.fillna(df.groupby('Group')['Value'].transform('mean'))
df

       Group       Value
    0      1   10.000000
    1      1   23.333333
    2      3    5.000000
    3      2   10.000000
    4      2   10.000000
    5      3   52.500000
    6      1   40.000000
    7      2   10.000000
    8      3  100.000000
    9      1   20.000000