Проверка вхождения слов в список ячейки
Надо создать столбец 'test', который будет содержать обобщённую характеристику содержания ячеек 'keywords'.
Если в 'keywords'входит слово 'marriage', то в 'test'поместить слово 'мелодрама'.
Если в 'keywords'входит слово 'future', то в 'test'поместить слово 'фантастика'.
Если в 'keywords'входит слово 'tale', то в 'test'поместить слово 'сказка'.
Если в 'keywords'нет перечисленных слов, то в 'test'поместить слово 'другое'.
Таблица и ссылка на нее: https://drive.google.com/file/d/1ps6nLGq30Or7sMNfQrGrjlIA-kr_PL22/view?usp=sharing
df['test'] = ["мелодрама" if ("marriage" in x)
else("фантастика" if ("future" in x)
else("сказка" if ("tale" not in x)
else 'другое')) for x in df['keywords'].str.split(pat='|')]
Ошибка: "TypeError: argument of type 'float' is not iterable"
Ответы (1 шт):
Автор решения: MaxU
→ Ссылка
попробуйте так:
mapping = {"мелодрама": "marriage", "фантастика": "future", "сказка": "tale"}
# регулярные выражения для замены целых строк
pat = {fr".*\b{v}\b.*": k for k, v in mapping.items()}
# создаем новый столбец при помощи замены строк
df["test"] = df["keywords"].replace(pat, regex=True)
# создаем "boolean mask" для строк из категории "другое"
mask = ~df["test"].isin(mapping.keys())
# заменяем строки по маске на "другое"
df.loc[mask, "test"] = "другое"
результат:
In [29]: df
Out[29]:
keywords score test
0 avatar|future|marine|native|paraplegic 7.9 фантастика
1 goddess|marriage ceremony|marriage proposal|pi... 7.1 мелодрама
2 bomb|espionage|sequel|spy|terrorist 6.8 другое
3 deception|imprisonment|lawlessness|police offi... 8.5 другое
4 NaN 7.1 другое
5 alien|american civil war|male nipple|mars|prin... 6.6 другое
6 sandman|spider man|symbiote|venom|villain 6.2 другое
7 17th century|based on fairy tale|disney|flower... 7.8 сказка
8 artificial intelligence|based on comic book|ca... 7.5 другое
9 blood|book|love|potion|professor 7.5 другое
