SQLのLIKE構文 に似た何かを行う方法はありますか?pandas text DataFrame列インデックスのリスト、またはデータフレームのインデックス作成に使用できるブール値のリスト?たとえば、SQLのWHERE <col> LIKE prefix_%
のように、列が 'prefix_'で始まるすべての行を一致させたい。
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
...を行うことができます
注:(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
使用できます
s.str.contains('a', case = False)
SQL-WHERE column_name LIKE 's%'
Python-column_name.str.startswith( 's')
SQL-WHERE column_name LIKE '%s'
Python-column_name.str.endswith( 's')
SQL-WHERE column_name LIKE '%s%'
Python-column_name.str.contains( 's')
その他のオプションについては、次を確認してください: https://pandas.pydata.org/pandas-docs/stable/reference/series.html