【问题标题】:How to compare columns from two CSV in python?如何比较python中两个CSV的列?
【发布时间】:2011-05-14 19:18:02
【问题描述】:

嗨 我有两个 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:

chr6s3+e3 ggcg
chr5s1+e1 cttt
chr6s4+e4 tata
chr5s2+e2 ggcg

#as you can see the file2 is randomly sorted

我想将 file2 的第 1 列与 file1 的第 2、3、4、5 列合并,同时将 file2 的第 2 列与文件 1 的第 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)

但它不起作用。你能帮我修复我的代码或给我其他方法吗? 感谢您的帮助!

【问题讨论】:

  • biostar 是提出这个问题的好地方 ;-) biostar.stackexchange.com
  • @Pierre 是的,我知道,但我更喜欢从这里开始问,因为这个问题是针对代码的,我相信这里有更多的人知道编程。

标签: python csv compare bioinformatics


【解决方案1】:

又快又脏:

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:])

输出:

chr6s3+e3   ggcg
chr5s1+e1   cttt

【讨论】:

    【解决方案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 的变体。您还必须确保您的值由制表符而不是空格分隔,就像在您的帖子中一样。我猜是的,而且由于 Stack Overflow 格式问题,您只有空格?

    【讨论】:

    • 希望你有标签,否则它不会工作。如果你真的使用空格来分隔列,你应该使用这一行来创建阅读器:reader1 = csv.reader(open('file1.tsv'), delimiter=' ')
    猜你喜欢
    • 2017-05-28
    • 1970-01-01
    • 2019-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多