如何比较python中两个CSV的列?

2024-04-24 22:47:42 发布

您现在位置:Python中文网/ 问答频道 /正文

嗨 我有两个CSV文件作为输入,例如:

文件1:

AK163828 chr5 s1 + e1 cttt 4
AK163828 chr5 s2 + e2 gtca 4
AK168688 chr6 s3 + e3 ggcg 4
AK168688 chr6 s4 + e4 tctg 4

文件2:

^{pr2}$

我想比较file2的column 1和file1的column 2、3、4、5 merged,同时比较file2的column 2和file 1的column 6,并且只选择匹配的行。在

所需输出为

chr6s3+e3 ggcg
chr5s1+e1 cttt

我试着用这个代码:

import csv

reader1 = csv.reader(open(file1), dialect='excel-tab' )
reader2 = csv.reader(open(file2), dialect='excel-tab' )

     for row1, row2 in zip(reader1,reader2):
            F1 = row1[1] + row1[2] + row1[3] + row1[4] + '\t' row1[5]
            F2 = row2[0] + '\t' + row2[1]
            print set(F1) & set(F2)

但它不起作用。你能帮我修改我的代码还是给我一个别的方法? 谢谢你的帮助!在


Tags: 文件csvcolumnfile1file2row1row2e3
2条回答

这个怎么样:

import csv

reader1 = csv.reader(open('file1.tsv'), dialect='excel-tab' )
reader2 = csv.reader(open('file2.tsv'), dialect='excel-tab' )

keys = set()

for row in reader1:
    keys.add((''.join(row[1:5]), row[5]))

for row in reader2:
    if (row[0], row[1]) in keys:
        print '\t'.join(row)

顺便说一句:您使用的格式(dialect='excel-tab')通常称为TSV,而不是CSV,尽管它是CSV的变体。你还必须确保你的值是用制表符隔开的,而不是像你的帖子那样用空格隔开。我猜是的,你只有空格是因为堆栈溢出格式问题?在

又快又脏:

import csv

file1 = 'C:/Users/Me/Desktop/file1'
file2 = 'C:/Users/Me/Desktop/file2'

reader1 = csv.reader(open(file1))
reader2 = csv.reader(open(file2))

F1 = set(''.join(row1[0].strip().split()[1:6]) for row1 in reader1)
F2 = set(''.join(row2[0].strip().split()) for row2 in reader2)

for sequence in F1.intersection(F2):
    print(sequence[:-4]),
    print('\t'),
    print(sequence[-4:])

输出:

^{pr2}$

相关问题 更多 >