Выберите строки с помощью частичной строки с запросом с помощью pandas

У меня есть DataFrame. 1 столбец (name) имеет строковые значения. Мне было интересно, есть ли способ выбрать строки на основе частичного совпадения строк с конкретным столбцом, используя метод DataFrame.query().

Я пробовал:

  • df.query('name.str.contains("lu")'). Сообщение об ошибке: "Объекты TypeError:" Series "изменяемы, поэтому их нельзя хэшировать"
  • df.query('"lu" in name'). Возвращает пустой DataFrame.

Код, который я использую:

import pandas as pd

df = pd.DataFrame({
    'name':['blue','red','blue'],
    'X1':[96.32,96.01,96.05]
}, columns=['name','X1'])  


print(df.query('"lu" in name').head())
print(df.query('name.str.contains("lu")').head())

Я знаю, что могу использовать df[df['name'].str.contains("lu")], но я предпочитаю использовать запрос.

Ответ 1

Этот ответ устарел. Пожалуйста, проверьте ответ @petobens.

Начиная с версии 0.20.2, query не поддерживает частичное совпадение строк. Есть открытый запрос на будущее, и один из разработчиков ядра, похоже, согласен, что это было бы хорошим дополнением.

Ответ 2

Проблема, на которую ссылается @ayhan, теперь показывает, как этого можно достичь с помощью механизма query Python:

print(df.query('name.str.contains("lu")', engine='python').head())

должно сработать.