2016-11-15 14 views
4

私はPython(とこのウェブサイト)を全く新しくしており、現在特定のデータフレーム列のNA値をそのモードに置き換えようとしています。私は働いていない様々な方法を試みました。NA値をPythonのDataFrame列のモードに置き換えるにはどうすればいいですか?

注:私が扱っているすべての列は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: 私の方法は、より多くの手動プロセスのとなり、最終的にこの1つは動作します:あなたはまだあなたがしたい行にアクセスする必要があるので、

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) 
関連する問題