自然言語処理をよくやっているので、データフレームに格納されたテキストデータから、
特定の文字列を含むものを抽出する作業は非常に頻繁に発生します。
そのときには、 pandas.Series.str.contains という非常に便利な関数を使うのですが、
Series の中に None や Nan があるとエラーになるのが地味に不便でした。
print(df)
```
出力結果:
col
0 あいうえお
1 かきくけこ
2 None
3 たちつてと
```
df[df["col"].str.contains("く")]
```
出力結果:
(略)
ValueError: cannot index with vector containing NA / NaN values
```
まあ、空白文字列か何かで埋めてあげれば何の問題もないのですが、このエラーが出ると嫌な気持ちになります。
気をつけていてもデータフレーム同士を結合したりするとすぐ None は発生しますし。
これはしょうがないと思っていたのですが、ドキュメントを見ていると、na というパラメーターがー準備されているのを見つけました。
contains の引数に na=True を指定すると,Noneの列も抽出され、na=Falseとすると、Noneの列は含みません。
print(df[df["col"].str.contains("く",na=False)])
```
出力結果:
col
1 かきくけこ
```
print(df[df["col"].str.contains("あ",na=True)])
```
出力結果:
col
0 あいうえお
2 None
```
これは便利ですね。
空文字列と、Noneを区別したい場面も結構あるのでNoneをそのまま残せるのはありがたいです。
また、ついでですが、 regex というパラメーターで、正規表現の使用未使用を切り替えられることにも気づきました。
デフォルトで正規表現が使えるのでいつも便利だと思っていたのですが、
完全一致のみにすることもできたのですね。