2016-12-19 2 views
0

Я пытаюсь построить простую функцию, чтобы заполнить столбцы панды с некоторые распределения, но он не может заполнить всю таблицу (ДФ еще есть NaN после fillna ...)панды fillna() не работает должным образом

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, все еще имеет NaNs!

Я проверил, чтобы rnd_filled был заполнен и имел правильную форму. Что происходит?

+0

Аре NaN только первой, второй и третьей колонке? – jezrael

+1

, если необходимо заменить NaN во всех df, удалите '[: 3]' из 'df.columns [3:]' – jezrael

+1

другой возможной проблемой является то, что все данные в некотором столбце являются «NaN». Можете ли вы добавить образец данных? – jezrael

ответ

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 
Смежные вопросы