PythonでDataFrameのすべての列を検索して特定の文字列を含む行を取得する
PythonでDataFrameのある列を検索して特定の文字列を含む行のmaskはよくありふれていて、すべての列に対して検索したものがなかったので備忘録として残す。
データの準備
import pandas as pd df = pd.DataFrame([[11, 'red', 'a', 1], [22, 'black', 'e', 0], [33, 'yellow', 'b', '10']], columns=['col1', 'col2', 'col3', 'col4']) ''' col1 col2 col3 col4 0 11 red a 1 1 22 black e 0 2 33 yellow b 10 '''
すべての列を検索して特定の文字列を含む行を取得する
# 各index内で文字列'a'が含まれているかのmask。 mask1 = df.apply(lambda row, string='a': True in (row.astype(str).str.contains(string).unique()), axis=1) ''' 0 True 1 True 2 False dtype: bool ''' df[mask1] # これでdfから取り出せる。 ''' col1 col2 col3 col4 0 11 red a 1 1 22 black e 0 '''
ある1列に対して特定の文字列を含む行を取得する
この内容はググればすぐ出てくる。
# col2に'e'が含まれているかのmask。 # この例ではastype(str)は不要だが例えば「col4で0が含まれているか」だと # col4のdtypeがobject(0と'10'が混じっている)になるので必要になる。 mask2 = df['col2'].astype(str).str.contains('e') ''' 0 False 1 True 2 True Name: col2, dtype: bool ''' df[mask2] # これでdfから取り出せる。 ''' col1 col2 col3 col4 1 22 black e 0 2 33 yellow b 10 '''