tsv文件和基于源文件的列重命名之间的完全联接

2024-09-21 10:31:34 发布

您现在位置:Python中文网/ 问答频道 /正文

我有176个.tsv文件,这是基因比对的结果,如下所示:

^{tb1}$

在这些文件中,我希望target_id列之间有一定的重叠,但不完整,因此我希望进行完全联接并保留所有行。此外,我感兴趣的是只保留每个文件的tpm值,并根据文件名重命名列

预期的数据帧类似于:

^{tb2}$

我知道bash中的join函数,但它每次可以用于两个文件,如果理解正确,我无法选择特定的列

提前谢谢你

编辑:文件名为SRR*.tsv


Tags: 文件数据函数bashidtargettsv文件名
1条回答
网友
1楼 · 发布于 2024-09-21 10:31:34

让我知道如果这个代码对你有效,没有这些文件很难测试

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>

编辑:打字错误

相关问题 更多 >

    热门问题