web-dev-qa-db-ja.com

Pandas SQLのLIKEのようなテキストマッチング?

SQLのLIKE構文 に似た何かを行う方法はありますか?pandas text DataFrame列インデックスのリスト、またはデータフレームのインデックス作成に使用できるブール値のリスト?たとえば、SQLのWHERE <col> LIKE prefix_%のように、列が 'prefix_'で始まるすべての行を一致させたい。

23
naught101

Seriesメソッド str.startswith (正規表現を使用)を使用できます。

In [11]: s = pd.Series(['aa', 'ab', 'ca', np.nan])

In [12]: s.str.startswith('a', na=False)
Out[12]: 
0     True
1     True
2    False
3    False
dtype: bool

str.contains (正規表現を使用)でも同じことができます。

In [13]: s.str.contains('^a', na=False)
Out[13]: 
0     True
1     True
2    False
3    False
dtype: bool

だからあなたはdf[col].str.startswith...を行うことができます

ドキュメントのSQL比較セクションも参照してください。

注:(OPが指摘したように)デフォルトでは、NaNは伝播します(したがって、結果をブールマスクとして使用する場合はインデックスエラーが発生します)。このフラグを使用して、NaNをFalseにマップする必要があることを示します。

In [14]: s.str.startswith('a')  # can't use as boolean mask
Out[14]:
0     True
1     True
2    False
3      NaN
dtype: object
24
Andy Hayden

使用できます

s.str.contains('a', case = False)
3
sushmit
  1. パターン「s」で始まるシリーズからすべての値を見つけるには:

SQL-WHERE column_name LIKE 's%'
Python-column_name.str.startswith( 's')

  1. パターン「s」で終わるシリーズからすべての値を見つけるには:

SQL-WHERE column_name LIKE '%s'
Python-column_name.str.endswith( 's')

  1. パターン「s」を含むシリーズからすべての値を見つけるには:

SQL-WHERE column_name LIKE '%s%'
Python-column_name.str.contains( 's')

その他のオプションについては、次を確認してください: https://pandas.pydata.org/pandas-docs/stable/reference/series.html

0
H Raihan