我觉得必须先问这个问题,但是我可能缺少搜索和描述我的问题的词汇。
我制作了一个Python3类,该类接受目录作为输入,并将大量数据收集到pandas.DataFrame中,这样我就可以做到这一点:
mymodule.myclass('/some/dir').get_tpm_values()
并获得带有一些列和行的pd.DataFrame,如下所示:
>>> seqit.Seqrun(41).get_tpm_values()
0041_P2017BB2S5R_S1 0041_P2017BB2S3R_S2 0041_P2017BB2S4R_S3 0041_P2017BB2S8R_S4 0041_P2017BB5S10R_S5
gene_id
ENSG00000000003 53.72 19.31 11.03 33.35 14.55
ENSG00000000005 1.05 0.34 0.19 0.84 0.12
ENSG00000000419 13.35 12.66 11.93 17.61 22.82
现在,此DataFrame是一个特殊的DataFrame,它始终在索引中包含基因,并在列中包含样本。这样,我可以使属性作用于返回的DataFrame,而不作用于任何DataFrame。即,我希望能够将Hugo符号添加到这样的索引中并保存到Excel中:
mymodule.myclass('/some/dir').get_tpm_values().add_hugo_symbols_to_index().to_excel('some_excel.xlsx')
这意味着我需要向Pandas添加属性,但仅在班级内部,我将如何做?
编辑,发布部分课程可能会有所帮助
class Myclass():
"""
A class that gives one a handle on a Snakemake sequencing data analysis
folder
"""
def __init__(self, seqrun_dir):
if isinstance(seqrun_dir, int):
self.seqrun_dir = self.number2seqrun(seqrun_dir)
else:
self.seqrun_dir = seqrun_dir
self.name = os.path.split(self.seqrun_dir)[-1]
self.quantification_data_loaded = False
self.pctpm_values_loaded = False
self.load_sample_table()
def get_tpm_values(self):
"""
Get a pd.DataFrame with the TPM values from loaded quantification_data dictionary
"""
if not self.quantification_data_loaded:
self.get_quantification_data()
self.tpm_values = dict()
for sample in self.samples:
try:
self.tpm_values[sample] = self.quantification_data[sample]['TPM']
except KeyError:
print('Filling column', sample, 'with NaNs')
self.tpm_values[sample] = np.nan
self.tpm_values = pd.DataFrame(self.tpm_values)
self.tpm_values_loaded = True
return self.tpm_values
答案 0 :(得分:1)
如果我正确理解了您的问题,则想向DataFrame-class添加一个方法。可以在Device admin deprecation
上找到对此的参考。我认为,解决此问题的最佳方法是创建自己的DataFrame类,该类继承自pandas.DataFrame并实现其他功能。例如,请参见下面的代码:
class HugoDataFrame(pd.DataFrame):
def add_hugo_symbols_to_index():
pass # Do your stuff here
然后,您应该根据以下内容创建一个HugoDataFrame,而不是创建一个DataFrame并返回它:
self.tpm_values = HugoDataFrame(self.tpm_values)
您的另一种选择是将此功能简单地导出到一个单独的函数中,该函数采用一个数据框并对其进行修改
mymodule.myclass('/some/dir').get_tpm_values().add_hugo_symbols_to_index().to_excel('some_excel.xlsx')
您致电
add_hugo_symbols_to_index(mymodule.myclass('/some/dir').get_tpm_values()).to_excel('some_excel.xlsx')