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”。
纯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)
此魔术的工作原理:
最后一步是通过or技巧完成的:None or value将返回value。value 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)