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

时间:2015-03-04 08:32:25

标签: python csv pandas

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

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

我的文件中的particalr列最多包含20个值(样本名称),因此如果我可以动态删除重复项而不是存储它们然后删除重复项,则可能会更快。是否可以删除重复项,因为它们以某种方式被发现?

如果没有,有没有办法更快地完成这项工作,而无需让用户明确说出她文件中的样本名称是什么?

2 个答案:

答案 0 :(得分:3)

不是“动态”,尽管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])

答案 1 :(得分:1)

由于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()