Проверка строкового значения DataFrame содержит слова с определенными префиксами - PullRequest
0 голосов
/ 30 ноября 2018

Первый раз работаю с Pandas, и я пытаюсь запросить DataFrame для этой спецификации.

Допустим, я создаю кадр данных следующим образом:

df = pd.read_csv(_file, names=['UID', 'Comment', 'Author', 'Relevancy'])

, который дает:

UID  .     Comment           .  Author .  Relevancy
1234 . motorcycles are cool  . dave    . 12
5678 . motorhomes are cooler . mike    . 13
9101 . i love motorbikes     . frank   . 14

Мне нужно возвращать все эти строки, когда я запрашиваю слово «мотор».

Т.е. должна быть возвращена строка, если ее строка «Комментарий» содержит слово с префиксомданное слово.

По сути, я хочу сделать что-то вроде:

df["Comment"][any(word in df["Comment"].str.split() if word.startswith("motor"))]

Любая помощь и направление очень ценится.

1 Ответ

0 голосов
/ 30 ноября 2018

Панды str операции не векторизованы.Вы можете использовать понимание списка:

df = pd.DataFrame({'Comment': ['motorcycles are cool', 'motorhomes are cooler',
                               'i love motorbikes', 'nomotor test string',
                               'some other test string']})

flag = [any(w.startswith('motor') for w in x.casefold().split()) for x in df['Comment']]
res = df.loc[flag]

print(res)

                 Comment
0   motorcycles are cool
1  motorhomes are cooler
2      i love motorbikes

Возможна менее эффективная версия, в которой используются методы Pandas str:

def check_words(x):
    return any(w.startswith('motor') for w in x)

flag = df['Comment'].str.lower().str.split().map(check_words)
res = df.loc[flag]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...