Проверка вхождения слов в список ячейки

Надо создать столбец '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      другое
→ Ссылка