Возвращает ключевое слово строки, если найдено в столбцах данных - PullRequest
0 голосов
/ 03 сентября 2018

У меня есть строка. Мне нужно найти, присутствуют ли ключевые слова в этой строке в моем фрейме данных.

Если присутствует, мне нужно вернуть это ключевое слово обратно.

Строка:

question="Joe is Available"
question=question.upper()
str_list=question.split()
str_list

Из [107]:

['JOE', 'IS', 'AVAILABLE']

Dataframe:

df=pd.DataFrame({"Person1":("Ash","Joe","Harry"),"Person2":("Abe","Lisa","Katty",),"Person3":("Sam","Max","Stone")})
df=df.apply(lambda x: x.astype(str).str.upper())


Person1 Person2 Person3
ASH     ABE     SAM
JOE     LISA    MAX
HARRY   KATTY   STONE

Моя попытка:

return_field=""
for x in str_list:
    print(x)
    for i in df.iterrows():
        if(df.str.contains(x)):
            return_field=x

Дает мне AttributeError: у объекта 'DataFrame' нет атрибута 'str'

Ожидаемый результат

Так как Джо присутствует в кадре данных, он должен вернуть меня обратно "Джо"

Ответы [ 2 ]

0 голосов
/ 03 сентября 2018

Если вы делаете это несколько раз, вы можете захотеть хэшировать свои значения через set. Кроме того, вы можете использовать map с str.upper для преобразования значений данных в верхний регистр 1 :

str_all = set(map(str.upper, df.values.ravel()))

question = "Joe is Available"
str_search = set(question.upper().split())

res = str_search & str_all

# {'JOE'}

1 Вы можете использовать pd.DataFrame.apply + lambda, но это не рекомендуется. Строковые операции через pd.Series.str в настоящее время заведомо медленные. Добавление петли lambda сверху ухудшает ситуацию.

0 голосов
/ 03 сентября 2018

Используйте

In [741]: [x for x in str_list if x in df.values]
Out[741]: ['JOE']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...