如何仅用2个或更少的NA结果值来填充NA

时间:2017-07-28 11:51:22

标签: python pandas numpy

我是python的新手。请帮助我如何继续。 以下数据框包含大块NaN。 #只为2个或更少连续的NA值填充NAs。 #请参阅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)

2 个答案:

答案 0 :(得分:0)

你应该考虑循环每个字典系列值并存储所有值的总和不是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个indice不会被填充mean,因为它是第三个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}

答案 1 :(得分:0)

让我们试试这个

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


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