如何将PyDESeq2的DeseqStats对象转换为Pandas DataFrame?
将PyDESeq2的DeseqStats对象转换为Pandas DataFrame
你之前的代码报错是因为PyDESeq2的DeseqStats对象没有tables属性——那套通过HTML中转的方法是R语言DESeq2的常用技巧,但PyDESeq2作为Python实现,有自己的原生API来直接获取DataFrame,不用绕弯。
正确的转换方法
1. 获取核心差异分析结果表
DeseqStats对象自带results_df属性,直接就能拿到标准的差异分析结果DataFrame,包含baseMean、log2FoldChange、pvalue、padj等所有关键列:
results_df = stat_res.results_df
2. 生成汇总统计表格(类似R中summary()的输出)
如果需要上调/下调基因数这类汇总信息,无需依赖不存在的tables属性,直接基于results_df计算即可:
# 自定义筛选阈值(可根据需求调整) padj_threshold = 0.05 l2fc_threshold = 1 # 计算各类基因数量 up_count = len(results_df[(results_df['padj'] < padj_threshold) & (results_df['log2FoldChange'] > l2fc_threshold)]) down_count = len(results_df[(results_df['padj'] < padj_threshold) & (results_df['log2FoldChange'] < -l2fc_threshold)]) total_tested = len(results_df) # 组装成汇总DataFrame summary_df = pd.DataFrame({ '上调基因数': [up_count], '下调基因数': [down_count], '总测试基因数': [total_tested] })
为什么之前的代码会报错
你用的HTML转换逻辑是R语言中处理DESeq2结果的方式,但PyDESeq2的API设计和R版本完全不同,DeseqStats对象并没有tables这个属性,因此触发了AttributeError。
内容的提问来源于stack exchange,提问作者alexis
相关产品推荐
相关产品推荐

