如何用Python合并多份tab格式文件并生成FPKM汇总表?
解决CTAB文件横向合并提取Gene与FPKM的问题
你已经完成了文件遍历和读取的基础工作,接下来只需要对每个数据框做针对性处理,再按Gene列横向合并就能得到想要的汇总表了。我帮你修改并完善代码,具体步骤如下:
步骤说明
- 首先补全
pandas的导入(你的代码里漏掉了这一步); - 读取每个CTAB文件时,只保留Gene和FPKM两列,避免多余数据干扰;
- 从文件名中提取样本名称(比如从
RBRN02.sorted.bam_t_data.ctab里提取RBRN02),并将FPKM列重命名为对应的样本名,方便后续识别; - 以第一个数据框的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
相关产品推荐
相关产品推荐

