修正方法: valueerror: na/nan 値を含む非ブール配列でマスクできません


pandas の使用時に発生する可能性のあるエラーは次のとおりです。

 ValueError : Cannot mask with non-boolean array containing NA / NaN values

このエラーは通常、パンダ データフレーム内で特定の文字列を含む行を検索しようとしているが、検索している列に NaN 値が含まれている場合に発生します。

次の例は、このエラーを実際に修正する方法を示しています。

エラーを再現する方法

次のパンダ データフレームがあるとします。

 import pandas as pd
import numpy as np

#createDataFrame
df = pd. DataFrame ({' team ': ['A', 'A', 'A', 'B', 'B'],
                   ' position ': ['Guard', 'Guard', np. nan , 'Guard', 'Forward'],
                   ' points ': [22, 28, 14, 13, 19]})

#view DataFrame
print (df)

  team position points
0 A Guard 22
1 A Guard 28
2 A NaN 14
3 B Guard 13
4 B Forward 19

次に、位置列に文字列「Guard」が含まれる DataFrame 内のすべての行にアクセスしようとするとします。

 #access all rows where position column contains 'Guard'
df[df[' position ']. str . contains (' Guard ')]

ValueError : Cannot mask with non-boolean array containing NA / NaN values

位置列に NaN 値があるため、エラーが発生します。

エラーを修正する方法

このエラーを回避するには、 str.contains()関数でna=False引数を使用します。

 #access all rows where position column contains 'Guard', ignore NaN
df[df[' position ']. str . contains (' Guard ', na= False )]

        team position points
0 A Guard 22
1 A Guard 28
3 B Guard 13

今度は、ポジション列に「Guard」を含むすべての行にエラーなしでアクセスできます。

このエラーを回避するもう 1 つの方法は、次のように.fillna(False)を使用することです。

 #access all rows where position column contains 'Guard', ignore NaN
df[df[' position ']. str . contains (' Guard '). fillna ( False )]

        team position points
0 A Guard 22
1 A Guard 28
3 B Guard 13

もう一度、ポジション列に「Guard」を含むすべての行にエラーなしでアクセスできます。

追加リソース

次のチュートリアルでは、Python の他の一般的なエラーを修正する方法を説明します。

パンダの KeyError を修正する方法
修正方法: ValueError: float NaN を int に変換できません
修正方法: ValueError: オペランドをシェイプでブロードキャストできませんでした

コメントを追加する

メールアドレスが公開されることはありません。 が付いている欄は必須項目です