方法一:(见方法三的编程版)
1.表达矩阵56sr.count 57sr.count
import ipython import pandas as pd data1=pd.read_table('./56sr.count', names=['gene', 'data1']) data2=pd.read_table('./57sr.count', names=['gene', 'data2'])
data1 gene data1 0 ENSG00000000003.14_2 825 1 ENSG00000000005.5_2 1 2 ENSG00000000419.12_2 1631 3 ENSG00000000457.13_2 285 4 ENSG00000000460.16_3 635 5 ENSG00000000938.12_2 0 6 ENSG00000000971.15_2 1 7 ENSG00000001036.13_2 1524 8 ENSG00000001084.10_3 1376 9 ENSG00000001167.14_2 1355 data2 gene data2 0 ENSG00000000003.14_2 983 1 ENSG00000000005.5_2 0 2 ENSG00000000419.12_2 1776 3 ENSG00000000457.13_2 212 4 ENSG00000000460.16_3 702 5 ENSG00000000938.12_2 0 6 ENSG00000000971.15_2 0
2.利用pandas的合并函数进行合并,注意需要取并集
datamerge=pd.merge(data1, data2, on='gene', how='outer')
datanerge gene data1 data2 0 ENSG00000000003.14_2 825 983.0 1 ENSG00000000005.5_2 1 0.0 2 ENSG00000000419.12_2 1631 1776.0 3 ENSG00000000457.13_2 285 212.0 4 ENSG00000000460.16_3 635 702.0 5 ENSG00000000938.12_2 0 0.0 6 ENSG00000000971.15_2 1 0.0 7 ENSG00000001036.13_2 1524 NaN 8 ENSG00000001084.10_3 1376 NaN 9 ENSG00000001167.14_2 1355 NaN
3.将缺失值重新赋值
datamerge.fillna('0') #根据实际情况进行缺失值的填充,
gene data1 data2 0 ENSG00000000003.14_2 825 983 1 ENSG00000000005.5_2 1 0 2 ENSG00000000419.12_2 1631 1776 3 ENSG00000000457.13_2 285 212 4 ENSG00000000460.16_3 635 702 5 ENSG00000000938.12_2 0 0 6 ENSG00000000971.15_2 1 0 7 ENSG00000001036.13_2 1524 0 8 ENSG00000001084.10_3 1376 0 9 ENSG00000001167.14_2 1355 0
4.将merge之后的数据写入文件
datamerge.to_csv('./merge.count')
或者指定分隔符
datamerge.to_csv('./merge1.count', sep=' ')
方法二:
利用Linux简单的paste,join方法即可
join方法只能取二者的交集,且使用之前文件需要先排序
paste方法可以直接将两个文件的行粘贴在一起,(如果基因名一样可以使用,如果基因名不一样就会出现问题了,)
方法三:(批量处理大数据,编程,花了三个小时现学的,被自己蠢哭了)
1 #!/usr/bin/python 2 3 import pandas as pd 4 import os 5 dict={} 6 #import sys 7 #args=sys.argv 8 9 name_list=os.listdir('countdir') #列出countdir下的文件 10 data0=pd.read_table('countdir/%s' % name_list[0], names=['gene', name_list[0]]) #pd.merge好像要指定两个参数才可以merge,所以先指定一个data0 11 for i in range(1,len(name_list)): #因为第一个count已经被读取了,所以从第二个看起建立词典,注意列表和字典的索引方式的不同 12 dict[i]=pd.read_table('countdir/%s' % name_list[i], names=['gene', name_list[i]]) #建立了所有count文件的索引,keys为数字 13 data0=pd.merge(data0, dict[i], on='gene', how='outer') #记得建立交集, 14 data0.to_csv('result.csv') 15 #发现输出结果中=只有两个文件发生了合并,后来仔细看代码时发现,没有利用循环的原理(想想高斯求和运算的原理就晓得啦)