You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python合并多份tab格式文件并生成FPKM汇总表?

解决CTAB文件横向合并提取Gene与FPKM的问题

你已经完成了文件遍历和读取的基础工作,接下来只需要对每个数据框做针对性处理,再按Gene列横向合并就能得到想要的汇总表了。我帮你修改并完善代码,具体步骤如下:

步骤说明

  1. 首先补全pandas的导入(你的代码里漏掉了这一步);
  2. 读取每个CTAB文件时,只保留Gene和FPKM两列,避免多余数据干扰;
  3. 从文件名中提取样本名称(比如从RBRN02.sorted.bam_t_data.ctab里提取RBRN02),并将FPKM列重命名为对应的样本名,方便后续识别;
  4. 以第一个数据框的Gene列为基准,依次合并所有样本的FPKM数据,最终得到横向汇总表。

完整代码

import os
import pandas as pd  # 补全pandas导入

path = "F:/RNASEQ2019/ballgown/abundance_est/"
files = []

# 遍历目录获取所有t_data.ctab文件
for r, d, f in os.walk(path):
    for file in f:
        if 't_data.ctab' in file:
            files.append(os.path.join(r, file))

# 处理每个文件,提取Gene和FPKM并重命名FPKM列
processed_dfs = []
for file_path in files:
    # 读取文件,只保留Gene和FPKM列
    df = pd.read_csv(file_path, sep="\t", usecols=['Gene', 'FPKM'])
    # 从文件名提取样本ID:比如RBRN02.sorted.bam_t_data.ctab → RBRN02
    sample_name = os.path.basename(file_path).split('.')[0]
    # 重命名FPKM列为样本名
    df.rename(columns={'FPKM': sample_name}, inplace=True)
    processed_dfs.append(df)

# 横向合并所有数据框(以Gene列为共同键)
merged_df = processed_dfs[0]
for df in processed_dfs[1:]:
    merged_df = pd.merge(merged_df, df, on='Gene', how='inner')

# 保存汇总文件为TSV格式(也可以改成csv,把sep='\t'换成',')
merged_df.to_csv("FPKM_summary.tsv", sep='\t', index=False)

print("汇总文件已生成!")

代码解释

  • usecols=['Gene', 'FPKM']:读取文件时只加载需要的两列,提升效率;
  • os.path.basename(file_path).split('.')[0]:通过文件名拆分提取样本标识,确保列名和样本一一对应;
  • pd.merge(merged_df, df, on='Gene', how='inner'):以Gene列为键进行内连接,保证所有样本的Gene完全匹配(因为你提到所有文件的Gene列内容一致,内连接完全适用);
  • 最后用to_csv保存结果,index=False避免生成多余的索引列。

运行这段代码后,你就能得到符合需求的汇总文件啦!

内容的提问来源于stack exchange,提问作者jit c

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 09:03:13