方法一:(見方法三的編程版)
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='\t')
方法二:
利用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 #發現輸出結果中=只有兩個文件發生了合並,后來仔細看代碼時發現,沒有利用循環的原理(想想高斯求和運算的原理就曉得啦)