TypeError при попытке использовать Regex в Pandas Dataframe - PullRequest
0 голосов
/ 09 июля 2020

Я работал над очисткой данных на своей работе, но получаю эту ошибку только на одном месяце данных. Я очистил все данные за январь, февраль, апрель и май. Не уверен, почему этот файл работает не так, как он, буквально так же настроен и все такое. Я продолжаю получать эту ошибку, кто-нибудь знает почему?

Код в основном захватывает данные из таблицы Excel и определяет, SSD это, HDD и т. Д. c. на основе названия.

пр. Заголовок: «DISCO SOLIDO SSD 240GB». Вывод: «SSD»

Он работал для всех остальных файлов, которые я запускал, но одни из данных месяца не работают.

Traceback (most recent call last):

File "__", line 55, in <module>

df['Product_Category'] = df.apply(lambda row: 'SSD' if prod_cat_ssd.search(row.Titulo_Publicacion) else row.Product_Category, axis=1)

File "__", line 6878, in apply

return op.get_result()

File "__", line 186, in get_result

return self.apply_standard()

File "__", line 296, in apply_standard

values, self.f, axis=self.axis, dummy=dummy, labels=labels

File "pandas\_libs\reduction.pyx", line 620, in pandas._libs.reduction.compute_reduction

File "pandas\_libs\reduction.pyx", line 128, in pandas._libs.reduction.Reducer.get_result

File "C:/Users/1000266230/PycharmProjects/Excel/reg_ex.py", line 55, in <lambda>

df['Product_Category'] = df.apply(lambda row: 'SSD' if prod_cat_ssd.search(row.Titulo_Publicacion) else row.Product_Category, axis=1)

TypeError: expected string or bytes-like object

Вот мой код:

df['Product_Category'] = '-'
df['Product_Category'] = df['Product_Category'].apply(str)

prod_cat_ssd = re.compile(r'\bSOLIDO\b|\bSSD\b|\bSóLIDO\b')
prod_cat_hdd = re.compile(r'\bDURO\b|\bRIGIDO\b|\bRíGIDO\b|\bRIGIDOS\b|\bHDD\b')
prod_cat_external_ssd = re.compile(r'\b(EXTERNO|EXTREME)\b.*\b(SOLIDO|SSD|SóLIDO)\b|\b(SOLIDO|SSD|SóLIDO)\b.*\b(EXTERNO|EXTREME)\b')
prod_cat_external_hdd = re.compile(r'\b(EXTERNO|EXTREME)\b.*\b(DURO|RIGIDO|RIGIDOS|RíGIDO|HDD)\b|\b(DURO|RIGIDO|RIGIDOS|RíGIDO|HDD)\b.*\b(EXTERNO|EXTREME)\b')
df['Product_Category'] = df.apply(lambda row: 'SSD' if prod_cat_ssd.search(row.Titulo_Publicacion) else row.Product_Category, axis=1)
df['Product_Category'] = df.apply(lambda row: 'HDD' if prod_cat_hdd.search(row.Titulo_Publicacion) else row.Product_Category, axis=1)
df['Product_Category'] = df.apply(lambda row: 'External SSD' if prod_cat_external_ssd.search(row.Titulo_Publicacion) else row.Product_Category, axis=1)
df['Product_Category'] = df.apply(lambda row: 'External HDD' if prod_cat_external_hdd.search(row.Titulo_Publicacion) else row.Product_Category, axis=1)

** Пожалуйста, не обращайте внимания на испанские sh слова или специальные символы.

Любая помощь приветствуется!

1 Ответ

0 голосов
/ 09 июля 2020

Преобразуйте все атрибуты в ваших pandas строках, которые не являются строками, в строку, например: row.Product_Category в str(row.Product_Category).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...