在python中合并数据时填补空白

在python中合并数据时填补空白,python,csv,matrix,gaps-and-islands,Python,Csv,Matrix,Gaps And Islands,我的问题是: 我从几个矩阵开始,从中提取数据,构建一个新的通用矩阵。 第一步是使用csv模块读取填充,并提取存储在第[1]行中的位置值,该位置值将用作最终矩阵中的列标题。每个内嵌包含总位置的子集,这些位置有时出现在多个内嵌中。因此,我首先通过合并所有位置值,忽略重复的位置值,从小到大构建一个有序列表。我就是这样做的: for infile in glob.glob('passed_*.vcf'): infilen=open(infile) inf = csv.reader(inf

我的问题是: 我从几个矩阵开始,从中提取数据,构建一个新的通用矩阵。 第一步是使用csv模块读取填充,并提取存储在第[1]行中的位置值,该位置值将用作最终矩阵中的列标题。每个内嵌包含总位置的子集,这些位置有时出现在多个内嵌中。因此,我首先通过合并所有位置值,忽略重复的位置值,从小到大构建一个有序列表。我就是这样做的:

for infile in glob.glob('passed_*.vcf'):
    infilen=open(infile)
    inf = csv.reader(infilen,delimiter='\t')
    for row in inf:
        if row[1] in pos:
            continue
        else:
            pos.append(row[1])
    infilen.close()
pos.sort(key=int)
head=str('\t'.join(pos))
of=open('trial.txt', 'a')   
print>>of,head
完成后,我返回原始填充并读取第[3]行中的另一个值,这次我想在上面创建的更正标题下添加该值,即位置。由于每个内嵌都包含总位置的一个子集,因此当存储在列表位置中的最终矩阵位置不在单个内嵌的第[1]行中时,我必须填充间隙。 下面是我正在尝试的代码:

for infile in glob.glob('passed_*.vcf'):
    infilen=open(infile)
    inf = csv.reader(infilen,delimiter='\t')
    seq=[]
    for row in inf:
        if row[1] in pos:
            seq.append(row[3])  
        else:
            seq.append('N')
不用说,我被卡住了。我想用一个while循环,但是因为我没有经验,所以我想问你一些建议

样本数据 输入示例1:

1   2025    blah    A   .   blah    PASS    AC=0    GT:DP   0/0:61
2   2027    blah    C   .   blah    blah    AC=0    GT:DP   0/0:61
3   2028    blah    T   .   blah    PASS    AC=0    GT:DP   0/0:61
输入样本n:

1   2025    blah    G   .   blah    PASS    AC=0    GT:DP   0/0:61
2   2026    blah    A   .   blah    blah    AC=0    GT:DP   0/0:61
3   3089    blah    T   .   blah    PASS    AC=0    GT:DP   0/0:61
输出单个矩阵,输入行[1]作为变量,行[3]作为值。每行都是不同的示例,即不同的输入文件:

          2025    2026    2027    2028  ...  3089
sample1    A       NaN     C       T         NaN
samplen    G        A     NaN     NaN         T
我使用pos收集值,我还使用pos2,其中包含相同的数据,这些数据的打印顺序不同,因为:

pos是以价值为导向的,有价值范围很有用 pos2是面向样本的,对于给定样本号的值很有用 为了避免范围过大,我使用了以下值:

-样本1.vcf:

1   2025    blah    A   .   blah    PASS    AC=0    GT:DP   0/0:61
2   2027    blah    C   .   blah    blah    AC=0    GT:DP   0/0:61
3   2028    blah    T   .   blah    PASS    AC=0    GT:DP   0/0:61
-样本2.vcf:

1   2025    blah    G   .   blah    PASS    AC=0    GT:DP   0/0:61
2   2026    blah    A   .   blah    blah    AC=0    GT:DP   0/0:61
3   2032    blah    T   .   blah    PASS    AC=0    GT:DP   0/0:61

您可能想使用加载、合并、骰子和切片矩阵。谢谢,我已经知道了这一点-但是,相信我,由于我的python技能非常出色,我一直在寻找一种独立的方法来完成我的代码。请您添加至少2个vcf示例的简短示例,以及所需的输出,好吗?这会让你更容易弄明白你想做什么…谢谢Emmanuel,我以前没想过使用字典法。我将用我正在处理的大量数据来测试这个解决方案。
1   2025    blah    G   .   blah    PASS    AC=0    GT:DP   0/0:61
2   2026    blah    A   .   blah    blah    AC=0    GT:DP   0/0:61
3   2032    blah    T   .   blah    PASS    AC=0    GT:DP   0/0:61