我有以下pandas代码段,它读取我.csv
文件的特定列中找到的所有值。
sample_names_duplicates = pd.read_csv(infile, sep="\t",
engine="c", usecols=[4],
squeeze=True)
我的文件中的particalr列最多包含20个值(样本名称),因此如果我可以动态删除重复项而不是存储它们然后删除重复项,则可能会更快。是否可以删除重复项,因为它们以某种方式被发现?
如果没有,有没有办法更快地完成这项工作,而无需让用户明确说出她文件中的样本名称是什么?
答案 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()