web-dev-qa-db-ja.com

Pandas-NaN値のみの行を削除します

多くのNaN値を含むDataFrameがあります。 NaN値が多すぎる行を削除したい;具体的には:7以上

dropna関数をいくつかの方法で使用してみましたが、anyNaN値を含む列または行を貪欲に削除することは明らかです。

この質問( Slice Pandas DataFrame by Row )は、NaN値が多すぎる行のリストをコンパイルできれば、それらを削除できることを示しています。すべてシンプルで

df.drop(rows)

count関数を使用してnull以外の値をカウントできることはわかっています。この関数を合計から減算して、その方法でNaNカウントを取得できます(NaN値をカウントする直接的な方法はありますか?続けて?)。しかし、それでも、DataFrameを行ごとに通過するループを作成する方法がわかりません。

これが正しい方向に進んでいると私が思ういくつかの擬似コードです:

### LOOP FOR ADDRESSING EACH row:
    m = total - row.count()
    if (m > 7):
        df.drop(row)

私はまだPandasに慣れていないので、この問題を解決する他の方法に非常にオープンです。それらがより単純であるか、より複雑であるかは関係ありません。

14
Slavatron

基本的にこれを行う方法は、列の数を決定し、非nan値の最小数を設定し、この基準を満たさない行を削除することです。

df.dropna(thresh=(len(df) - 7))

docs を参照してください

14
EdChum

df.dropnaのオプションのthresh引数を使用すると、行を保持するために非NA値の最小数を指定できます。

df.dropna(thresh=df.shape[1]-7)
3
Roger Fan