【问题标题】:how to fill NA with mean only for 2 or less consequective values of NA如何仅用 NA 的 2 个或更少连续值的平均值填充 NA
【发布时间】:2018-01-04 11:36:09
【问题描述】:

我是 python 新手。请帮助我应该如何进行。 以下数据帧包含大块 NaN。 # 仅对 2 个或更少的连续 NA 值填充 NA。 # 请参阅 fillna() 的文档以找出您将用于仅填充特定数量的 NA 的参数。 # 生成的数据框应该看起来像 df_filled

# The resulting dataframe should look like df_filled shown below.

df = pd.DataFrame({'val1':[4,np.nan,7,np.nan,np.nan,9,5, np.nan , 1,9,np.nan, np.nan,np.nan, 5, np.nan], 
                    'val2': [ np.nan, 5,7,np.nan, np.nan,8,3,np.nan, 4,np.nan, np.nan, np.nan,np.nan,21,np.nan]})

d = {'val1': {0: 4.0,1: 5.7142857142857144,2: 7.0,3: 5.7142857142857144,4: np.nan,5: 9.0,6: 5.0,7: np.nan,8: 1.0,9: 9.0,10: np.nan,11: np.nan,12: np.nan,13: 5.0,14: np.nan},
'val2': {0: 8.0,1: 5.0,2: 7.0,3: 8.0,4: np.nan,5: 8.0,6: 3.0,7: np.nan,8: 4.0,9: np.nan,10: np.nan,11: np.nan,12: np.nan,13: 21.0,14: np.nan}}

df_filled = pd.DataFrame(d)

【问题讨论】:

  • 你在这部分有没有遇到什么困难:Refer to the documentation of fillna() to find out the parameter you would use to fill only a certail number of NAs.

标签: python pandas numpy


【解决方案1】:

让我们试试这个

df["val1"] = df["val1"].transform(lambda x: x.fillna(x.mean(), limit=2))
df["val2"] = df["val2"].transform(lambda x: x.fillna(x.mean(), limit=2))
print df


如果它解决了您的问题,请不要忘记告诉我们 :)

【讨论】:

  • 感谢我使用 df.fillna(df.mean(),limit=2) 得到了答案
【解决方案2】:

您应该考虑循环遍历每个 dict 系列值并存储 所有不同于 NA 的值的总和不同于 NA 的元素计数数组具有小于或等于 2 个连续 NA 值的索引

例子:

'val1':[4,np.nan,7,np.nan,np.nan,9,5, np.nan , 1,9,np.nan, np.nan,np.nan, 5, np.nan]

 sum = 40,
 count = 7,
 array_na = [1, 3, 4, 7, 10, 11, 14]

在我的逻辑案例中,12 指数不会用平均值填充,因为它是第三个 np.nan 值。另外,我认为这不是您提到的逻辑,因为描述很混乱,结果似乎是错误的:

{'val1': {0: 4.0,1: 5.7142857142857144,2: 7.0,3: 5.7142857142857144,4: np.nan,5: 9.0,6: 5.0,7: np.nan,8: 1.0,9: 9.0,10: np.nan,11: np.nan,12: np.nan,13: 5.0,14: np.nan}

【讨论】:

    猜你喜欢
    • 2020-06-08
    • 1970-01-01
    • 2020-04-14
    • 2020-08-25
    • 1970-01-01
    • 1970-01-01
    • 2019-03-31
    • 1970-01-01
    • 2016-10-03
    相关资源
    最近更新 更多