Как я могу использовать список строк для поиска фрейма данных pandas с помощью Python 3

#python #excel #pandas #list #dataframe

Вопрос:

Я пытаюсь найти фрейм данных Pandas со списком в Python 3. Для ясности я нахожусь на компьютере с Windows с python 3.8.

У меня есть файл excel, в котором я ищу определенные ключевые слова в столбце заметок, а затем я хочу, чтобы программа вернула другой столбец, содержащий идентификационный номер. В настоящее время мой код делает это, помещая данные excel во фрейм данных pandas, а затем проверяя строковую переменную с помощью str.содержит, но у меня есть более одного ключевого слова, которое я хочу найти, и я не уверен, как это сделать.

Вот мой код до сих пор:

 import pandas as pd

searchWord1 = 'Honda'
searchWord2 = 'honda'
searchWord3 = 'Toyota'
searchWord4 = 'toyota'
searchWord5 = '350'

df = pd.read_excel('data.xlsx',sheet_name='Sheet1')

df2 = (df[df['Notes'].str.contains(searchWord1)])

print(df2['id_number'])

 

Я пытался создать список, используя цикл for и повторяя его, но безуспешно, может быть, я просто делаю это неправильно? Я довольно новичок в python и пандах, поэтому буду очень признателен за любую помощь, спасибо.

Ответ №1:

Вы можете определить слова поиска в списке, а затем сгенерировать шаблон поиска следующим образом:

 searchWords = ['Honda', 'honda', 'Toyota', 'toyota', '350']
pattern = rf"b{'|'.join(searchWords)}b"
 

шаблон будет настроен следующим образом: r'bHonda|honda|Toyota|toyota|350b' где:

b на обоих концах должно быть обеспечено только полное совпадение слов вместо частичного совпадения слов (например, совпадение «350», но не «12350»). Если вам требуется частичное совпадение слов, вы можете удалить эту пару » b` с обоих концов.

| является ли регулярное выражение метасимволом для альтернативных строк (например or )

Затем используйте шаблон поиска следующим образом:

 df = pd.read_excel('data.xlsx',sheet_name='Sheet1')

df2 = (df[df['Notes'].str.contains(pattern)])

print(df2['id_number'])
 

Комментарии:

1. Это именно то, что мне было нужно, спасибо!