2016-06-02 4 views
2

Я использую Pandas, Jupyter Notebooks и Python. У меня есть набор данных с 4 столбцами и 10000 записями. В настоящее время, когда я использую следующий код для получения дубликатов, каким-то образом код подбирает неправильные записи. FYI: тип данных столбцов являются следующие:Pandas Dataframe дублирует записи, собирает неправильные записи

Initial_Date = int64 
Final_Date = int64 
Origin = object 
sub_location = object 

Мой текущий код:

dup = df.duplicated(['Initial_Date','Final_Date','Origin','sub_location'], keep='last') 

Ниже приведен пример набора данных, который подхватили используя код выше:

00121980,00121980,Australia,Brighton:Queensland 
00121980,00121980,Australia,Brisbane:Queensland 
17021987,17021987,Bangladesh,Sylhet-Sunamganj 
17021987,17021987,Brazil,Sao Paolo suburb 

Если вы посмотрите на первые две записи: начальная и конечная дата и Origin совпадают, но sub_origin не подходит, один - Брайтон, а другой - Брисбен.

То же самое применяется в последних двух записях, даты совпадают, но Origin - это не то же самое.

Из этого я понимаю, что df.duplicated не подбирает правильные записи или я не использую его правильно. Имеются ли типы данных с df.duplicated?

Если я просто использую df.duplicated, тогда возвращаемая булева серия не имеет дубликатов. Может кто-нибудь объяснить/показать мне, как используется .duplicated?

Пожалуйста, имейте в виду, что это не полный набор данных, однако пример, который я представил, является именно той проблемой, которую я имею в реальном наборе данных. Я сузил df.duplicated критерии и наткнулся на эту ошибку.

Спасибо, ребята: D

ответ

4

обратить внимание на keep параметра:

In [116]: s = pd.Series([1,1,1,2,3]) 

In [117]: s 
Out[117]: 
0 1 
1 1 
2 1 
3 2 
4 3 
dtype: int64 

In [118]: s.duplicated(keep='first') 
Out[118]: 
0 False 
1  True 
2  True 
3 False 
4 False 
dtype: bool 

In [119]: s.duplicated(keep='last') 
Out[119]: 
0  True 
1  True 
2 False 
3 False 
4 False 
dtype: bool 

In [120]: s.duplicated(keep=False) 
Out[120]: 
0  True 
1  True 
2  True 
3 False 
4 False 
dtype: bool 

Я думаю, вы хотите использовать keep=False

из docs:

держать: {'первый', 'Last', False}, по умолчанию 'first'

first: Mark дублирует как True, за исключением первого вхождения.

последний: Марк дублирует как Истинный, за исключением последнего случая.

False: Отметьте все дубликаты как Истинные.

+0

@Timetraveller Этот ответ на месте. В вашем примере «dup» не показывал все записи, которые были дублированы из-за параметра 'keep = last'. Если 'keep = False' были установлены, вы увидите, что последние две записи были дубликатами других записей, а не друг другом. – piRSquared

+0

@MaxU Привет, что произойдет, если я хочу сбросить дубликаты. Если я выберу keep = False, все экземпляры будут удалены. В приведенном выше примере запись 0,1,2, которая содержит значение 1, будет отброшена, правильно? Что произойдет, если я хочу сохранить одну из трех записей, я могу изменить сохранение на «последний» или «первый»? – Timetraveller

+0

@MaxU Спасибо, друг. – Timetraveller

Смежные вопросы