从具有不同基因的受试者列表中创建一个矩阵,这些基因存在或不存在于 python

Posted

技术标签:

【中文标题】从具有不同基因的受试者列表中创建一个矩阵,这些基因存在或不存在于 python【英文标题】:creating a matrix from from a list of subjects with different genes present or absent with python 【发布时间】:2019-03-25 20:04:50 【问题描述】:

我有一个包含不同主题的文件,其中包含每个主题存在的基因列表(每个基因新行)。我想将数据重组为一个矩阵,其中行中有不同的受试者,然后是每个存在的基因的列(1 或 0 表示存在或不存在)。我将原始数据作为我用 pandas 导入的 excel 文件来尝试用 Python 执行此操作。但老实说,我不知道如何以一种好的方式做到这一点。

image of how the data is structured and of how it is supposed to be formatted.

非常感谢我能得到的所有帮助!

已经非常感谢了

【问题讨论】:

【参考方案1】:

如果这是您的文件原始文件:

Subject,Gene
subject1,gene1
subject1,gene2
subject1,gene3
subject2,gene1
subject2,gene4
subject3,gene2
subject3,gene4
subject3,gene5

然后你可以用pd.crosstab做这样的事情:

>>> import pandas as pd
>>> df = pd.read_csv("genes.csv")
>>> pd.crosstab(df["Subject"], df["Gene"])
Gene      gene1  gene2  gene3  gene4  gene5
Subject                                    
subject1      1      1      1      0      0
subject2      1      0      0      1      0
subject3      0      1      0      1      1

【讨论】:

【参考方案2】:

使用pivot()

df['count'] = 1
df.pivot(index='Subject', columns='Gene', values='count')

Gene       gene1    gene2   gene3   gene4   gene5
Subject                 
subject1    1.0      1.0    1.0      NaN    NaN
subject2    1.0      NaN    NaN      1.0    NaN
subject3    NaN      1.0    NaN      1.0    1.0

已更新 -- 基于您的评论的完整示例

# import pandas module
import pandas as pd
import numpy as np

# read your excel file
df = pd.read_excel(r'path\to\your\file\myFile.xlsx')

# create a new column call 'count' and set it to a value of 1
df['count'] = 1

# use pivot and assign it to a new variable: df2
df2 = df.pivot(index='Subject', columns='Gene', values='count').replace(np.nan, 0)

# print your new dataframe
print(df2)

【讨论】:

嗨,克里斯,感谢您的回复。我还没有完全开始工作。如果我使用脚本:'import pandas as pd' 然后 'df = pd.read_excel("path+file")' 然后我不知道如何定义带有“count”的变量。我可以给 df.pivot 取一个类似的名称:'name = df.pivot(index='Subject', columns='Gene', values='count')' 并在最后打印:'print name' ? @newbie_here 我更新了我的答案,向你展示了一个完整的例子 谢谢克里斯。我现在明白了。也是一个非常好的方法!非常感谢!

以上是关于从具有不同基因的受试者列表中创建一个矩阵,这些基因存在或不存在于 python的主要内容,如果未能解决你的问题,请参考以下文章

根据单细胞表达矩阵,箱图可视化高表达基因

python中具有基因表达矩阵的层次聚类

GSVA全名Gene set variation analysis(基因集变异分析)简介

如何从具有不同长度列表的字典中创建字典列表

基因差异表达分析方法

从列表到数据框查找基因名称