【发布时间】:2019-04-02 21:11:30
【问题描述】:
我觉得这一定是以前问过的,但我可能缺乏搜索和描述我的问题的词汇。
我创建了一个 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
【问题讨论】:
-
我觉得你的问题有点令人困惑。根据我的理解(或认为我理解),您想向 pandas.DataFrame 类添加一个函数,对吗?您抓取值,使用基因,想要添加 Hugo 符号(无论是什么),导出到 excel 等。只会让读者感到困惑。事实上,涉及 DataFrames 和 pandas 甚至可能是不必要的。您想要做的(确切地说)是将方法(函数)添加到现有类(DataFrame-class)
标签: python-3.x pandas class