Как определить повторяющиеся строки в списках? - PullRequest
0 голосов
/ 15 января 2019

Я импортирую столбец с 1280 (как я думал) уникальными идентификаторами из DataFrame из csv-файла.

Я планировал поместить каждый идентификатор в словарь в качестве ключа и установить «0» в качестве значения. А затем поместите все в новый DataFrame.

При извлечении столбца из DataFrame в виде списка я заметил, что число было сокращено до 1189 вместо 1280.

Я понял, в оригинальном DataFrame должны быть дубликаты. Это было бы сюрпризом, поскольку идентификаторы должны быть уникальными. Я мог бы использовать ярлык и просто использовать список для нового DataFrame. Тем не менее, очень важно, чтобы я выяснил, что происходит, и выявил дубликаты, если они есть.

Единственная проблема в том, что я не могу определить дубликаты. Я в недоумении относительно того, в чем может быть проблема.

import pandas as pd
from itertools import cycle

DF0 = pd.read_csv("FILENAME.csv", sep='$', encoding='utf-8-sig')

l_o_0 = ['0']

l_DF0 = list(DF0['Short_ID'])
print('  len of origin object   '+str(len(DF0['Short_ID'])))
print('            l_DF0 is a   '+str(type(l_DF0)))
print('                of len   '+str(len(l_DF0))+'\n')

d_DF0 = dict(zip(DF0['Short_ID'], cycle(l_o_0)))
print('  len of origin object   '+str(len(DF0['Short_ID'])))
print('            d_DF0 is a   '+str(type(d_DF0)))
print('                of len   '+str(len(d_DF0))+'\n')

print('           difference:   '+(str(len(DF0['Short_ID'])-len(d_DF0)))+'\n')

s_DF0 = set(l_DF0)
print('            s_DF0 is a   '+str(type(s_DF0)))
print('             of length   '+str(len(s_DF0))+'\n')

red_l_DF0 = list(s_DF0)
print('        red_l_DF0 is a   '+str(type(red_l_DF0)))
print('             of length   '+str(len(red_l_DF0))+'\n')

l_prob = []
for item in l_DF0:
    if item not in red_l_DF0:
        l_prob.append(item)
print(len(l_prob))

Вывод:

  len of origin object   1280
            l_DF0 is a   <class 'list'>
                of len   1280

  len of origin object   1280
            d_DF0 is a   <class 'dict'>
                of len   1189

           difference:   91

            s_DF0 is a   <class 'set'>
             of length   1189

        red_l_DF0 is a   <class 'list'>
             of length   1189

           l_prob is a   <class 'list'>
             of length   0
>>>

Я попробовал вышеизложенное на основе того, что нашел здесь:
Операция вычитания списка Python
Либо я не правильно использую инструмент, либо это неправильный инструмент. Любая помощь будет оценена - спасибо заранее!

1 Ответ

0 голосов
/ 15 января 2019

Используйте функцию панд duplicated:

duplicated_stuff = DF0[DF0['Short_ID'].duplicated()]

В зависимости от того, что вы хотите увидеть, измените параметр keep для дубликата. Для отладки вы, вероятно, захотите keep=False.

...