2024-09-21 10:31:34 发布
网友
我有176个.tsv文件,这是基因比对的结果,如下所示:
.tsv
在这些文件中,我希望target_id列之间有一定的重叠,但不完整,因此我希望进行完全联接并保留所有行。此外,我感兴趣的是只保留每个文件的tpm值,并根据文件名重命名列
target_id
预期的数据帧类似于:
我知道bash中的join函数,但它每次可以用于两个文件,如果理解正确,我无法选择特定的列
join
提前谢谢你
编辑:文件名为SRR*.tsv
让我知道如果这个代码对你有效,没有这些文件很难测试
import re import os import sys import pandas as pd tpm_dict = {} for fn in os.listdir(sys.argv[1]): if re.match('.*\.tsv$', fn): header = fn.replace('.tsv', '') this_df = pd.read_csv(os.path.join(sys.argv[1], fn), sep='\t') for i, row in this_df.iterrows(): try: tpm_dict[row['target_id']][header] = row['tpm'] except KeyError: try: tpm_dict[row['target_id']] = {header: row['tpm']} except: print(f"Problem in {fn} at row {i}") df = pd.DataFrame.from_dict(tpm_dict, orient='index') df.to_csv('joined.tsv', sep='\t')
另存为tsvjoin.py,然后运行python3 tsvjoin.py <folder with TSVs>
tsvjoin.py
python3 tsvjoin.py <folder with TSVs>
编辑:打字错误
让我知道如果这个代码对你有效,没有这些文件很难测试
另存为
tsvjoin.py
,然后运行python3 tsvjoin.py <folder with TSVs>
编辑:打字错误
相关问题 更多 >
编程相关推荐