首页 > 解决方案 > 如何使用数据框的行和列创建类对象的多个实例?

问题描述

第一次创建和使用类,所以我可能会遗漏一些明显的东西。无论如何,如果我为它提供单个实例(序列),我有一个可以正常工作的类。

 class Protein(object):

    def __init__(self,sequence):
        self.peptide=sequence
        self.length=len(self.peptide)
        self.mass=int(Peptide.Mass(self.peptide))

我需要创建包含在数据框中的 >20k 实例。这是一个简化的示例:

x= {'Gene': {0: 'Apple',
      1: 'Orange',
      2: 'Grape',
      3: 'Kiwi',
      4: 'Berry'},
     'Sequence': {0: 'TYK', 1: 'WWK', 2: 'CLK', 3: 'KVA', 4: 'VAV'},
     'UniprotID': {0: AJ38498, 1: AJ334343, 2: AJ67798, 3: AJ36998, 4: AJ15287}
}

df= pd.DataFrame(x)

这可能不是最好的方法,但我想创建一个函数,使用函数生成我的类(肽)的多个实例。我计划跨多个数据框(可能具有不同的列名)进行相同的数据分析,因此从长远来看,创建一个函数可以节省我的时间。这是我的尝试:

def Menu(df,identity,sequence,db_id):
    for protein,sequence,name in zip(df[identity],df[sequence],df[db_id]):
        protein = Protein(sequence)
        protein.name=str(name)

例子:

   Menu(df,"Gene","Sequence","UniprotID")

目前,它没有创建实例:

##If I type Kiwi.mass it will return an error stating that the object Kiwi doesn't exist.

标签: pythondataframeclassobject

解决方案


您的Menu函数似乎没有返回任何内容,而且它覆盖了for循环中的蛋白质对象。

因此,对于您要问的内容,您Menu可以在函数中创建一个空列表并填写for循环并返回该列表。

def Menu(df,identity,sequence,db_id):
    proteins = []
    for protein,sequence,name in zip(df[identity],df[sequence],df[db_id]):
        protein = Protein(sequence)
        protein.name=str(name)
        proteins.append(protein)

    return proteins

推荐阅读