データフレームの中から特定の文字を含む行を抽出する

データフレームの中から特定の文字を含む行を抽出する

# 特定の名前を探す練習スクリプト
import pandas as pd

df=pd.DataFrame({'名前':['太郎','次郎','三郎'],'研究種目':['若手研究','基盤研究(C)','若手研究']
                 ,'総額':[360,350,480]})

print(df,'\n')

mask = df.applymap(lambda x: '三郎' in str(x))

print (mask)

df1 = df[mask.any(axis=1)]

print('\n', df1)

上のコードを実行した結果は、以下のようになります。

   名前     研究種目   総額
0  太郎     若手研究  360
1  次郎  基盤研究(C)  350
2  三郎     若手研究  480 

      名前   研究種目     総額
0  False  False  False
1  False  False  False
2   True  False  False

    名前  研究種目   総額
2  三郎  若手研究  480

pythonでのエラー ValueError: Cannot mask with non-boolean array containing NA / NaN valuesへの対処法【解決】

pythonのpandasのデータフレームの特定のカラムの中である文字列を含むものだけ取り出したいと思いました。

df_文字列= df[df[‘特定のカラム名’].str.contains(‘文字列’)]

というコードを実行したところ、

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

というエラーになりました。このエラーの原因は何かというと、カラムの中に「空欄」が存在していたからなんですね。

以下のようにNAを無視するように na=Falseを付け加えたら、

df_文字列 = df[df[‘特定のカラム名’].str.contains(‘文字列’, na=False)]

エラーを回避できました。

この手のエラーは、空欄を含むスプレッドシートをデータフレームとして読み込んで何か処理をしようとするときには必ず遭遇してしまうと思います。空欄に関しては、何らかの例外処理が必要ということですね。