修正方法: 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: オペランドをシェイプでブロードキャストできませんでした