2016-11-15 37 views
4

我对Python(和本网站)完全陌生,目前正试图用它们的模式替换特定数据帧列中的NA值。我试过了各种不起作用的方法。请帮我看看我做错了什么:如何用python中的DataFrame列的模式替换NA值?

注意:我正在使用的所有列都是float64类型。我所有的代码都会运行,但是当我在列中检查空数量df[cols_mode].isnull().sum()时,它仍然是一样的。

方法1:

cols_mode = ['race', 'goal', 'date', 'go_out', 'career_c'] 

df[cols_mode].apply(lambda x: x.fillna(x.mode, inplace=True)) 

我试图Imputer方法太多,但遇到了同样的结果

方法2:

for column in df[['race', 'goal', 'date', 'go_out', 'career_c']]: 
    mode = df[column].mode() 
    df[column] = df[column].fillna(mode) 

方法3:

df['race'].fillna(df.race.mode(), inplace=True) 
df['goal'].fillna(df.goal.mode(), inplace=True) 
df['date'].fillna(df.date.mode(), inplace=True) 
df['go_out'].fillna(df.go_out.mode(), inplace=True) 
df['career_c'].fillna(df.career_c.mode(), inplace=True) 

方法4: 我的方法变得越来越手动过程,最后这一个工程:

df['race'].fillna(2.0, inplace=True) 
df['goal'].fillna(1.0, inplace=True) 
df['date'].fillna(6.0, inplace=True) 
df['go_out'].fillna(2.0, inplace=True) 
df['career_c'].fillna(2.0, inplace=True) 
+0

你是否看了替代方法? http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.replace.html –

+0

“方法2”有什么问题? – MaxU

+0

@MaxU方法2正在返回一个错误。 'mode'返回一个Series,而不是一个单一的值。 –

回答

2

mode返回一个系列,所以你仍然需要访问你想要的行在替换DataFrame中的NaN值之前。

for column in ['race', 'goal', 'date', 'go_out', 'career_c']: 
    df[column].fillna(df[column].mode()[0], inplace=True) 

如果你想将它应用到数据框的所有列,则:

for column in df.columns: 
    df[column].fillna(df[column].mode()[0], inplace=True)