LoginSignup
0
0

More than 1 year has passed since last update.

pandas str.containsについて

Posted at

この記事の目的

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について、
文字だけだとイメージがつかないこともありまとめてみました

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0