drop_duplicates() не работает, потому что он не находит никаких дубликатов?

#python #pandas #dataframe #duplicates

#python #панды #фрейм данных #дубликаты

Вопрос:

Я начал работать с Пандами на прошлой неделе, так что я могу что-то упустить, но вот в чем моя проблема. Просматривая обзоры товаров в интернет-магазине, я получил идентификаторы пользователей, которые написали отзывы. Поскольку я хотел получить дополнительные данные, я расширил фрейм данных, чтобы собрать все другие отзывы о других продуктах, написанные этими пользователями. Итак, по логике вещей, когда я расширяю фрейм данных, я должен найти дважды один и тот же user_ID, review_text и product_ID (продукт, для которого пользователь написал отзыв). Следовательно, мой фрейм данных выглядит следующим образом в основном для данного пользователя:

Указатель идентификатор продукта_id product_num_review количество продуктов product_review_score оценка продукта идентификатор пользователя пользователь_review_text
5 1186030 6 0 76561197971290677 Мусорный продукт!
470 1239050 NaN NaN 76561197971290677 Мне это нравится
471 1311250 NaN NaN 76561197971290677 Ме
472 1186030 NaN NaN 76561197971290677 Мусорный продукт!
473 1197370 NaN NaN 76561197971290677 Хорошо!

Итак, здесь у меня есть два дубликата, строка 5 и строка 472. В строке 472 есть NaN, потому что при расширении обзоров и очистке этого обзора я не смог очистить другую информацию (например, количество обзоров этого продукта, например.)

Поскольку это может быть конечный пробел или, возможно, обзоры могли быть изменены между двумя экземплярами (очень маловероятно, но все же), я исключил проверку дубликатов в соответствии с текстом обзоров, а вместо этого решил удалить строки, которые имели одну и ту же пару product_id / user_id .

 df =df.drop_duplicates(subset=["product_id", "user_id"], keep="first")
 

Проблема здесь в том, что pandas не обнаруживает никаких дубликатов! Я проверил это, выполнив:

 df.duplicated(subset=["product_id", "user_id"]) 
 

И все, что возвращается, является ложным, что означает, что дубликаты не были найдены.

Что я пробовал: я проверил, связана ли проблема с типом столбца, и после выполнения

 print(df.dtypes)
 

Это говорит мне, что как product_id, так и user_id являются типами объектов. Преобразование их в int или str не изменило результат.

Итак, я здесь, не зная, в чем здесь проблема. Ибо дубликаты есть, это точно, но почему pandas не обнаруживает их? Я уверен, что это ошибка новичка, но я здесь немного растерялся. Спасибо за вашу помощь.

Комментарии:

1. Вы уверены, что нет никаких дополнительных пробелов?

2. Это просто сработало, конечно, после того, как я опубликовал вопрос ага! Что я сделал, так это преобразовал столбцы в int, и это сработало. Я думал, что сделал это, но, видимо, нет.

3. Так это работает? прохладный

4. Посмотрите также на имена столбцов. В вашем фрейме данных есть «product_ID», но вы пытаетесь найти дубликаты в столбце «product_id».

5. Ах да, извините за это. Это был тип, это действительно product_id в моем фрейме данных. Я отредактировал свой пост, спасибо, что указали на это.

Ответ №1:

Хорошо, итак, я решаю проблему, даже если я не уверен, что смогу это объяснить. В своем вопросе я написал, что пытался преобразовать столбцы в int, но, по-видимому, в первый раз я написал это неправильно. Итак, что я сделал, так это следующее:

 df2["product_id"] = pd.to_numeric(df2["product_id"])
df2["user_id"] = pd.to_numeric(df2["user_id"])
 

И это сработало!