Мне интересно, есть ли более эффективный способ использования функции str.contains() в Pandas для поиска двух частичных строк сразу. Я хочу выполнить поиск по определенному столбцу в dataframe для данных, содержащих либо «nt», либо «nv». Сейчас мой код выглядит так:Использование str.contains() в pandas с dataframes
df[df['Behavior'].str.contains("nt", na=False)]
df[df['Behavior'].str.contains("nv", na=False)]
И затем я прилагаю один результат к другому. Я хотел бы использовать одну строку кода для поиска любых данных, которые включают «nt» ИЛИ «nv» ИЛИ «nf». Я играл с некоторыми путями, которые, как я думал, должны работать, в том числе просто придерживаться трубы между терминами, но все это приводит к ошибкам. Я проверил документацию, но я не рассматриваю это как вариант. Я получаю такие ошибки:
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-113-1d11e906812c> in <module>()
3
4
----> 5 soctol = f_recs[f_recs['Behavior'].str.contains("nt"|"nv", na=False)]
6 soctol
TypeError: unsupported operand type(s) for |: 'str' and 'str'
Есть ли быстрый способ сделать это? Спасибо за любую помощь, я новичок, но я ЛЮБЛЮ панды для борьбы с данными.
благодаря такой красоты! , осторожно, хотя между трубой и поисковыми терминами не должно быть места! – jaknap32
@ jaknap32: Если вы используете модификатор '(? X)', вы можете добавлять пробелы везде, где хотите - '' (? X) nt | nv "' - (но если у вас есть осмысленные пробелы в шаблоне, вам нужно будет избегать их, а также '#' char). См. [Python 're.X' docs] (https://docs.python.org/2/library/re.html#re.VERBOSE). Во всяком случае, 'n [tv]' является лучшим регулярным выражением, чем 'nt | nv'. –
+1 для выражения «na = False». У моих данных есть пробелы, и моя строка содержит функцию, которая не будет работать без нее. –