#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"])
И это сработало!