2017-09-14 11 views
2

行に「9999-Don't Know」という列が含まれている場合、データフレーム内のすべての行を削除するにはどうすればよいですか?複数の列に特定の文字列を含む混合データ型のpandasデータフレームのすべての行を削除します

データフレーム全体の値の形式(文字列、数値など)に基づいて行を削除する、または特定の列の値に基づいて行を削除する、またはデータフレームから行を削除するソリューションを見つけることができました。名前を使用して列数が少なくなっています。

Thisは私が見つけた最も近いものですが、ボリューム(76+列)のせいですべての列名を入力できないため、この解決法は機能しません。

以下

は、「9999-ドント・ノウ」を含む4行を削除した後、出力はので、私はクリーンアップで新しいExcelファイルを書き込むことができ、このようになっているはずのサンプルデータセット

pd.DataFrame.from_items([('RespondentId', ['1ghi3g','335hduu','4vlsiu4','5nnvkkt','634deds','7kjng']), ('Satisfaction - Timing', ['9-Excellent','9-Excellent','9999-Don\'t Know','8-Very Good','1-Very Unsatisfied','9999-Don\'t Know']),('Response Speed - Time',['9999-Don\'t Know','9999-Don\'t Know','9-Excellent','9-Excellent','9-Excellent','9-Excellent'])]) 

ですデータ。

pd.DataFrame.from_items([('RespondentId', ['5nnvkkt','634deds']), ('Satisfaction - Timing', ['8-Very Good','1-Very Unsatisfied']),('Response Speed - Time',['9-Excellent','9-Excellent'])]) 

答えて

5

使用

In [677]: df[~(df == "9999-Don't Know").any(axis=1)] 
Out[677]: 
    RespondentId Satisfaction - Timing Response Speed - Time 
3  5nnvkkt   8-Very Good   9-Excellent 
4  634deds 1-Very Unsatisfied   9-Excellent 

それとも

In [686]: df[~df.eq("9999-Don't Know").any(axis=1)] 
Out[686]: 
    RespondentId Satisfaction - Timing Response Speed - Time 
3  5nnvkkt   8-Very Good   9-Excellent 
4  634deds 1-Very Unsatisfied   9-Excellent 

それとも

と同じ
In [683]: df[(df != "9999-Don't Know").all(axis=1)] 
Out[683]: 
    RespondentId Satisfaction - Timing Response Speed - Time 
3  5nnvkkt   8-Very Good   9-Excellent 
4  634deds 1-Very Unsatisfied   9-Excellent 

混合列型で


、あなたが混在 `dtype` ...使用` df.astype(オブジェクト).NE(「9999-を持っている場合にはPIRさんのコメントdf.astype(object)

In [695]: df[df.astype(object).ne("9999-Don't Know").all(axis=1)] 
Out[695]: 
    RespondentId Satisfaction - Timing Response Speed - Time 
3  5nnvkkt   8-Very Good   9-Excellent 
4  634deds 1-Very Unsatisfied   9-Excellent 
+1

@見ますすべてを(軸= 1) ' – piRSquared

+0

@ジョンゴルト。ソリューションをありがとうが、それは動作しませんでした。私はTypeErrorを取得しました:["9999-Don't Know"]とブロック値を比較できませんでした。私はこの文字列を持つ行の数を数えようとしたときに同じエラーが発生しました。その全体的な質問はここにあります(https://stackoverflow.com/questions/46220656/counting-total-rows-in-pandas-dataframe-with-the-same-string-value-in-multiple-c) – techscolasticus

+0

私は置換で解決しようとしていましたが、これは非常に高速です。 +1 – Vaishali