合并表达矩阵--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                                                                                       #发现输出结果中=只有两个文件发生了合并,后来仔细看代码时发现,没有利用循环的原理(想想高斯求和运算的原理就晓得啦)

 

 

 

posted @ 2017-12-26 12:58  遗世独立的愚公  阅读(2261)  评论(0编辑  收藏  举报