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

时间:2017-01-28 21:40:46

标签: python csv bioinformatics jupyter-notebook libreoffice-calc

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

正如您所看到的,第一列中有重复项,但如果我要组合重复行,则其他列中不会覆盖任何数据。有没有办法可以在第一列中将行与重复值组合在一起?

例如,转动" 1,A,A ,,"和" 1 ,,, T,T"进入" 1,A,A,T,T"。

1 个答案:

答案 0 :(得分:4)

普通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

这种魔法如何运作:

  • 迭代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])