Мне нужно прочитать из файла CSV и записать в новый файл CSV с 0 дубликатов - PullRequest
1 голос
/ 25 апреля 2019

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

Я решил часть записи, но не смог решитьдубликат части.До сих пор я пробовал вложенный цикл, но с 0 успехами.

Это работает, но есть дубликаты

with open('somefile.csv', 'w') as csvfile:
        filewriter = csv.writer(csvfile, delimiter=',', quotechar='|', quoting=csv.QUOTE_MINIMAL)
        filewriter.writerow(['Data', 'MoreData', 'EvenMoreData'])

        for row in rows:
    # parsing each column of a row  
            filewriter.writerow([row[3], row[4], row[2]])

Где все идет не так

   for row in rows:
    # parsing each column of a row  
            for copy in rows:
                if row[3] != copy[3] and row[2] != copy[2]:
                    filewriter.writerow([copy[3], copy[4], copy[2]])

Ответы [ 3 ]

0 голосов
/ 25 апреля 2019

Вы можете использовать набор ключей (row[2] и row[3] в вашем случае), чтобы отслеживать ключи, которые вы уже видели:

seen = set()
for row in rows:
    if (row[2], row[3]) not in seen:
        seen.add((row[2], row[3]))
        filewriter.writerow([row[3], row[4], row[2]])
0 голосов
/ 25 апреля 2019

Вы можете импортировать его в панды, удалить дубликаты, а затем экспортировать новый CSV:

import pandas pd

df = pd.read_csv('my_csv.csv')
df.drop_duplicates(keep=False, inplace=True)
df.to_csv('my_csv_fixed.csv')

Выше будет добавлен столбец индекса. Если вы не хотите этого, индексируйте первый (0) столбец или любой другой, который вам нужен:

df = pd.read_csv('my_csv.csv', index_col=0)

Кроме того, если вы предпочитаете вкладки в качестве разделителя, экспортируйте с аргументом ключевого слова sep:

df.to_csv('my_csv_fixed.csv', sep='\t')
0 голосов
/ 25 апреля 2019

набор

При использовании set вместо списка удаляются дубликаты.

for row in set(rows):
  ...

в этом случае это, вероятно, список списков, поэтому может быть также в ваших интересах использовать set(row), если вам нужны уникальные данные в строке.

...