この記事の目的
pandasのDataFrameの検索方法について整理
pandasとは?
データ解析を容易にするためのライブラリ
私の場合、csvからデータを読みこみ、
pandasを使用してDataFrameにしていじったりします
DataFrameとは?
pandasでデータを扱う際の型になります
DataFrameとSeriesがあります
-
Series(シリーズ)
データが1列の場合の型です -
DataFrame(データフレーム)
データが複数列の場合の型です
DataFrameから1列を抽出した場合、自動でSeriesとなります
DataFrameでの検索(str.contains())
今回はDataFrameでの検索方法の中で、str.contains()を使用した方法を整理しました
str.containsは特定の文字を含む検索が可能です
次のようなDataFrameを例とします
A B C D
0 NaN B0 C0 D0
1 B1 C1 D1
2 A1 B2 C2 D2
3 A3 B3 C3 D3
A B C D F
3 A1 B1 C4 D4 F2
5 A5 B2 C5 D5 F3
6 A0 B4 C6 D6 F6
7 A7 B6 C7 D7 F7
コード
import pandas as pd
import numpy as np
df1 = pd.DataFrame({'A': [np.NaN, '', 'A1', 'A3'],
'B': ['B0', 'B1', 'B2', 'B3'],
'C': ['C0', 'C1', 'C2', 'C3'],
'D': ['D0', 'D1', 'D2', 'D3']})
df2 = pd.DataFrame({'A': ['A1', 'A5', 'A0', 'A7'],
'B': ['B1', 'B2', 'B4', 'B6'],
'C': ['C4', 'C5', 'C6', 'C7'],
'D': ['D4', 'D5', 'D6', 'D7'],
'F': ['F2', 'F3', 'F6', 'F7']},
index=[3, 5, 6, 7])
引数ごとの動作例
regex 正規表現の指定
コード
# regex:True 正規表現を使用(デフォルト)
result = df2[df2['A'].str.contains('A[1|0]')]
# regex:False 正規表現を不使用
result = df2[df2['A'].str.contains('A[1|0]',regex = False)]
結果
# regex:True
A B C D F
3 A1 B1 C4 D4 F2
6 A0 B4 C6 D6 F6
# regex:False
Empty DataFrame
Columns: [A, B, C, D, F]
Index: []
na NaNの処理指定
コード
# na:False NaNがある行をFalseとして扱います
result = df1[df1['A'].str.contains('1',na = False)]
# na:True NaNがある行をTrueとして扱います
result = df1[df1['A'].str.contains('1',na = True)]
print(result)
# NaNがデータに存在する状態で、naを使用しないとエラーとなります
try:
result = df1[df1['A'].str.contains('1')]
except Exception as e:
print(e)
結果
# na:False
A B C D
2 A1 B2 C2 D2
# na:True
A B C D
0 NaN B0 C0 D0
2 A1 B2 C2 D2
# na:なし
Cannot mask with non-boolean array containing NA / NaN values
case 大文字小文字の区別
コード
# case:Ture 大文字小文字を区別(デフォルト)
result = df2[df2['A'].str.contains('a[1|0]')]
# case:False 大文字小文字を区別しない
result = df2[df2['A'].str.contains('a[1|0]',case = False)]
結果
# case:Ture
Empty DataFrame
Columns: [A, B, C, D, F]
Index: []
# case:False
A B C D F
3 A1 B1 C4 D4 F2
6 A0 B4 C6 D6 F6
終わり
今回はstr.containsについて、
文字だけだとイメージがつかないこともありまとめてみました