合並表達矩陣--pandas


方法一:(見方法三的編程版)

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

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM