Pandas のstr.contais
を利用して指定の値を含まない行の抽出方法をまとめました。
データフレームの中身をクリーニング等で抽出作業は必須スキルです。
今回は、
str.contains("除きたい文字列")
と
否定演算子~
を使って~df
として指定の文字列を含まない行の抽出方法
をまとめました。
行いたいことを図示します。
以下の事をPandas のデータフレーム上で行いたいと思います。
str.contains と 否定演算子を使う
str.contains("除きたい文字列")
と
否定演算子~
を使えば、簡単に抽出できます。
また、print(‘before/after:’, df.shape)を前後に挟むことで
データフレームの前後のサイズを把握します。
1
2
3
print('before:', df.shape)
df = df[~df['メールアドレス'].str.contains('@example.org')]
print('after:', df.shape)
前後に配置したdf.shape
でデータフレームのサイズのBefore/After を記録して抽出サイズ(削除された行数)を把握します。
抽出後のデータフレームは以下のとおりです。
練習データで指定する「値を含む」場合を示します
このブログで利用した練習用データフレームの作成から抽出までのコードは以下のとおりです。 今回は、「指定値を含む」ケースです。
1
2
3
4
5
6
7
8
9
10
11
12
13
# 演習用のデータフレームを作成します。
df = pd.DataFrame({ '顧客番号': ['01285679', '01340788', '02123782', '10541976', '12297411',
'13299899', '30144450', '47339981'],
'都道府県名': ["北海道","北海道",'青森県','群馬県','千葉県','東京都','和歌山県','沖縄県'],
'メールアドレス': ["nabe@example.net","hiro@example.net","aatsu@example.net",
"hi106@example.org","im_to@example.co.jp","ka713@example.org",
"sato@example.com","oka_h@example.net"]},
index=[0, 1, 2, 3, 4, 5, 6,7])
# オリジナルのデータフレームを表示
df = df[df['メールアドレス'].str.contains('@example.org')]
display(df)
まとめ
Point
df = df[df['メールアドレス'].str.contains('@example.org')] 含むで抽出
df = df[~df['メールアドレス'].str.contains('@example.org')] 含まないで抽出
参照ページ一覧
このブログを作成するにあたり、以下のページを参考にしています。併せてご覧ください。
1) カラムデータの特定語句の有無を判定しカテゴリ化する
2) データフレーム内の列間の値を比較する
3) データセットを理解するためのスクリプト4選