Есть ли способ сделать что-то похожее на синтаксис SQL LIKE в столбце TextFrame pandas, так что он возвращает список индексы или список логических элементов, которые можно использовать для индексирования фрейма данных? Например, я хотел бы иметь возможность сопоставлять все строки, где столбец начинается с 'prefix_', аналогичный WHERE <col> LIKE prefix_%
в SQL.
Pandas соответствие текста подобно SQL LIKE?
Ответ 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
- Чтобы найти все значения из серии, которая начинается с шаблона "s":
SQL - ГДЕ column_name LIKE '%'
Python - column_name.str.startswith('s')
- Чтобы найти все значения из серии, которая заканчивается шаблоном "s":
SQL - ГДЕ имя-столбца НРАВИТСЯ "% s"
Python - column_name.str.endswith('s')
- Чтобы найти все значения из серии, содержащей шаблон "s":
SQL - WHERE имя_ столбца LIKE "% s%"
Python - column_name.str.contains('s')
Для дополнительных опций, проверьте: https://pandas.pydata.org/pandas-docs/stable/reference/series.html