有没有办法在pandas text DataFrame列上执行与SQL's LIKE syntax类似的操作,以便返回索引列表或可用于索引数据帧的布尔值列表?例如,我希望能够匹配列以“prefix_”开头的所有行,类似于SQL中的WHERE <col> LIKE prefix_%
。
答案 0 :(得分:19)
您可以使用系列方法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
...
See also the SQL comparison section of the docs.
注意:(如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
答案 1 :(得分:2)
你可以使用
s.str.contains('a', case = False)
答案 2 :(得分:1)
SQL-WHERE column_name喜欢's%'
Python-column_name.str.startswith('s')
SQL-在哪列名称都类似于'%s'
Python-column_name.str.endswith('s')
SQL-WHERE column_name类似于'%s%'
Python-column_name.str.contains('s')
有关更多选项,请检查:https://pandas.pydata.org/pandas-docs/stable/reference/series.html