如何合并第一个单元格中具有相同值的CSV行?

aaa*_*aaa -1 python csv bioinformatics libreoffice-calc jupyter-notebook

这是文件:https : //drive.google.com/file/d/0B5v-nJeoVouHc25wTGdqaDV1WW8/view?usp=sharing

如您所见,第一列中有重复项,但是如果我要合并重复的行,则其他列中不会覆盖任何数据。有什么办法可以将第一列中具有重复值的行合并?

例如,将“ 1,A,A,”和“ 1,,T,T”变成“ 1,A,A,T,T”。

Mar*_*rat 5

纯Python:

import csv

reader = csv.Reader(open('combined.csv'))
result = {}

for row in reader:
    idx = row[0]
    values = row[1:]
    if idx in result:
        result[idx] = [result[idx][i] or v for i, v in enumerate(values)]
    else:
        result[idx] = values
Run Code Online (Sandbox Code Playgroud)

此魔术的工作原理:

  • 遍历CSV文件中的行
  • 对于每条记录,我们检查之前是否存在具有相同索引的记录
  • 如果这是我们第一次看到此索引,则只需复制行值
  • 如果这是重复项,则将行值分配给空单元格。

最后一步是通过or技巧完成的:None or value将返回valuevalue or anything会回来的value。因此,result[idx][i] or v如果不为空,则将返回现有值或行值。

要输出此内容而不丢失重复的行,我们需要保留索引,然后迭代并输出相应的result条目:

indices = []
for row in reader:
    # ...
    indices.append(idx)

writer = csv.writer(open('outfile.csv', 'w'))
for idx in indices:
    writer.writerow([idx] + result[idx])
Run Code Online (Sandbox Code Playgroud)