读取包含许多重复值的大型 csv 文件,在读取时删除重复项

Read large csv file with many duplicate values, drop duplicates while reading

我有以下 pandas 代码片段,它读取在我的 .csv 文件的特定列中找到的所有值。

sample_names_duplicates = pd.read_csv(infile, sep="\t", 
                                      engine="c", usecols=[4],
                                      squeeze=True)

我的文件的特定列最多可能包含 20 个值(样本名称),因此如果我可以即时删除重复项而不是存储它们然后删除重复项可能会更快。是否可以删除以某种方式找到的重复项?

如果不是,有没有办法更快地做到这一点,而不必让用户明确命名她文件中的样本名称?

由于 read_csv() 返回的结果是可迭代的,您可以将其包装在 set() 调用中以删除重复项。请注意,使用集合会丢失您可能拥有的任何顺序。如果你想排序,你应该使用 list()sort()

独特的无序集示例:

sample_names_duplicates = set(pd.read_csv(infile, sep="\t", engine="c", usecols=[4], squeeze=True))

有序列表示例:

sample_names = list(set(pd.read_csv(infile, sep="\t", engine="c", usecols=[4], squeeze=True)))
sample_names.sort()

不是 "on the fly",尽管 drop_duplicates 应该足以满足大多数需求。

如果您想即时执行此操作,则必须手动跟踪特定列上的重复项:

import csv

seen = [] # or set()
dup_scan_col = 3
uniques = []

with open('yourfile.csv', 'r') as f:
    reader = csv.reader(f, delimiter='\t')
    for row in reader:
       if row[dup_scan_col] not in seen:
          uniques.append(row)
          seen.append(row[dup_scan_col])