美文网首页
python脚本系列-两列数据互相转化

python脚本系列-两列数据互相转化

作者: 凯凯何_Boy | 来源:发表于2020-07-06 11:28 被阅读0次

数据分析中常常会有这样的转换需求


图片.png

脚本如下:

import sys
infile = open(sys.argv[1],'r')
res = open(sys.argv[2],'w')

result = {}
for line in infile:
    line = line.strip().split('\t')
    if len(line) < 2: continue
    accession = line[0]
    go = line[1]
    result.setdefault(accession,set()).add(go) #这样好处是不会有重复值
    #这里可以换成列表的形式acc2go.setdefault(accession,[]).append(go)
for acc,goi in acc2go.items():
#增添第二列为重复的数量
    res.write("%s\t%d\t%s\n"%(acc,len(goi),",".join(goi)))
res.close()
图片.png

另一种

import sys
num = {}
old = open(sys.argv[1], 'r')
for line in old:
    line = line.strip().split('   ')
    if line[0] not in num:
        num[line[0]] = line[1]
    else:
        num[line[0]] += f',{line[1]}'
old.close()
new = open(sys.argv[2], 'w')
for key,value in num.items():
    print(f'{key}\t{value}', file = new)

new.close()

OK,换个思路,此时我们想把数据从右边的格式转换为左边的格式怎么做呢?


图片.png

第一种

import sys

def Trans_file(f1,f2):
    for i in f1.readlines():
        j = i.split('   ')
        for k in j[1].split(','):
            m = j[0] + '\t' + k
            if(m[-1] != '\n'):
                m = m + '\n'
            print(m)
            f2.write(m)
f1 = open(sys.argv[1],'r')
f2 = open(sys.argv[2],'w')
Trans_file(f1,f2)
f1.close()
f2.close()

第二种

import sys
dict = {}
final = open(sys.argv[2],'w')
with open(sys.argv[1],'r') as p:
    for line in p:
        line = line.strip().split('   ')
        gene = line[0]
        dict[gene] = line[1]
for key,value in dict.items():
    for i in value.split(','):
        print(f'{key}\t{i}',file=final)
final.close()

嗯,大功告成~~

另外,第一种情况有时候我们想要进行重复值求和时用python实现一下,稍微改动下语句即可(虽然这种处理在R中有一堆的函数可以处理):

num = {}
old = open(sys.argv[1], 'r')
for line in old:
    line = line.strip().split('   ')
    if line[0] not in num:
        num[line[0]] = float(line[1])
    else:
        num[line[0]] += float(line[1])

old.close()
new = open(sys.argv[2], 'w')
for key,value in num.items():
    print(f'{key}\t{value}', file = new)
new.close()

相关文章

网友评论

      本文标题:python脚本系列-两列数据互相转化

      本文链接:https://www.haomeiwen.com/subject/bokwqktx.html