我是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)
答案 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
如果它解决了您的问题,请不要告诉我们。)