Pandas соответствие текста подобно SQL LIKE?

Есть ли способ сделать что-то похожее на синтаксис SQL LIKE в столбце TextFrame pandas, так что он возвращает список индексы или список логических элементов, которые можно использовать для индексирования фрейма данных? Например, я хотел бы иметь возможность сопоставлять все строки, где столбец начинается с 'prefix_', аналогичный WHERE <col> LIKE prefix_% в SQL.

Ответ 1

Вы можете использовать метод 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) по умолчанию NaNs будут распространяться (и, следовательно, вызывать ошибку индексирования, если вы хотите использовать результат в виде булевой маски), мы используем этот флаг, чтобы сказать, что 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

Ответ 2

вы можете использовать

s.str.contains('a', case = False)

Ответ 3

  1. Чтобы найти все значения из серии, которая начинается с шаблона "s":

SQL - ГДЕ column_name LIKE '%'
Python - column_name.str.startswith('s')

  1. Чтобы найти все значения из серии, которая заканчивается шаблоном "s":

SQL - ГДЕ имя-столбца НРАВИТСЯ "% s"
Python - column_name.str.endswith('s')

  1. Чтобы найти все значения из серии, содержащей шаблон "s":

SQL - WHERE имя_ столбца LIKE "% s%"
Python - column_name.str.contains('s')

Для дополнительных опций, проверьте: https://pandas.pydata.org/pandas-docs/stable/reference/series.html