2016-09-24 8 views
1

私は列の1つに欠損値がいくつかあるパンダデータフレームを持っています。パンダの欠損値を含む行を削除します

データフレームは数百行から成りますが、列4では5つの値が?です。

この列の値が?の行を削除したいとします。

私は4列目は?に等しくなるために行を削除するには

df = df[np.isfinite(df[:,4])] 
+0

実際には '?'(文字列)ですか?列にそのような列が含まれている場合は行を削除しますか? –

+0

'DataFrame.dropna()'メソッドは、あなたがしたいことを達成していますか? –

+0

'df [df.iloc [:、4] .astype(str)!="? "]'。つまり、列4が索引4を意味する場合は、列4に索引3を使用することができます。 – Abdou

答えて

1

のようなものを使用してみましたが、あなたは?に等しくないデータを選択することができます。

# Test data 
df = DataFrame({ 
     'col0': [0, 1, 2, 3, 4], 
     'col1': [0, 1, 2, 3, 4], 
     'col2': [0, 1, 2, 3, 4], 
     'col3': [0, 1, 2, 3, 4], 
     'col4': [0, 1, 2, '?', '?']}) 

df.loc[df.iloc[:, 4] != '?'] 

    col0 col1 col2 col3 col4 
0  0  0  0  0 0 
1  1  1  1  1 1 
2  2  2  2  2 2 

あなたは4列目は?が含まれている行を削除したい場合は、?文字をエスケープして動作するように、ブールインデックス、最終的にはブール値のデフォルト値Falseを提供する必要があるため、それは少しトリッキーです否定~

df.loc[~df.iloc[:,4].str.contains('\?', na = False)] 

    col0 col1 col2 col3 col4 
0  0  0  0  0 0 
1  1  1  1  1 1 
2  2  2  2  2 2 

編集

列が数値のみが含まれている場合は、次のメソッドを使用することができます。変換できない値に対してNaNを生成するには、errorsパラメータcoerceを使用して数値に変換してください。その後、単にdropnaを使用して値を削除します。

df.iloc[] = pd.to_numeric(df.iloc[:,4], errors='coerce') 
# Or if you want to apply the transformation to the entire DataFrame 
# df = df.apply(pd.to_numeric, errors='coerce')  
df.dropna(inplace=True) 

     col0 col1 col2 col3 col4 
0  0  0  0  0 0.0 
1  1  1  1  1 1.0 
2  2  2  2  2 2.0 
+0

列4はロードされたときに文字列値を持つため、 – Jamgreen

+0

@Jamgreenはい、このアプローチを使用するために編集を追加しました。 – Romain

関連する問題