• 合并表达矩阵--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=' ')

    方法二:

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

     

  • 相关阅读:
    项目实战之天天酷跑(三):缓冲加载游戏界面
    项目实战之天天酷跑(二):开始游戏界面
    项目实战之天天酷跑(一):登录界面
    DBeaver安装
    基于SpringBoot+Vue开发的前后端分离博客项目完整教学
    freemarker教程
    ftl 常用指令及语法详解
    FTL 入门
    IDEA右侧Maven消失解决方法
    nodejs和npm的关系
  • 原文地址:https://www.cnblogs.com/lmt921108/p/8117441.html
Copyright © 2020-2023  润新知