Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如果两个文件中的值匹配,则合并行-Python_Python_Merge - Fatal编程技术网

如果两个文件中的值匹配,则合并行-Python

如果两个文件中的值匹配,则合并行-Python,python,merge,Python,Merge,我有两个文件,文件1如下所示: #query_name KEGG_KOs PROKKA_00019 K00240 PROKKA_00020 K00246 PROKKA_00022 K02887 Geneid KEGG_KOs Chr Count PROKKA_00019 K00240 k141_1000050 102 PROKKA_00020 K00246 k141_1000050 132 文件2: Geneid Chr Count PROK

我有两个文件,文件1如下所示:

#query_name KEGG_KOs
PROKKA_00019   K00240
PROKKA_00020   K00246
PROKKA_00022   K02887
Geneid  KEGG_KOs    Chr Count
PROKKA_00019    K00240  k141_1000050    102
PROKKA_00020    K00246  k141_1000050    132
文件2:

Geneid  Chr Count
PROKKA_00019    k141_1000050    102
PROKKA_00020    k141_1000050    132
PROKKA_00021    k141_1000054    36
如果文件1中的“#query_name”与文件2中的“Geneid”匹配,则要创建如下所示的文件3:

#query_name KEGG_KOs
PROKKA_00019   K00240
PROKKA_00020   K00246
PROKKA_00022   K02887
Geneid  KEGG_KOs    Chr Count
PROKKA_00019    K00240  k141_1000050    102
PROKKA_00020    K00246  k141_1000050    132
我还不能创建file3,到目前为止,我已经写了以下内容,但还不能让它工作。可以使用其他选项,但我可以告诉你,我所需要的只是一个简单的脚本。任何帮助都将不胜感激,谢谢

filenames =['file1.txt', 'file2.txt']
with open('file3.txt', 'w') as collated:
    with open('1.txt', 'r') as genes:
        with open('2.txt', 'r') as counts:
            if '#query_name' in genes == 'Geneid' in counts:
                for line1, line2 in zip(genes, counts):
                    print(line1.strip(), line2.strip(), file=collated)

以下是使用熊猫的解决方案:

输入:

df1 = pd.read_csv('file1.txt', sep='\t')
df2 = pd.read_csv('file2.txt', sep='\t')
merged_df = df1.merge(df2, left_on='#query_name' , right_on='Geneid' , how='inner').drop(['#query_name'],axis=1)
merged_df.to_csv('output.csv', index=False)
import pandas as pd
def to_df(file):
    with open(file) as f:
        df = [line.strip().split() for line in f]
    return pd.DataFrame(df[1:], columns=df[0])
df1 = to_df('file1.txt')
df2 = to_df('file2.txt')
merged_df = df1.merge(df2, left_on='#query_name' , right_on='Geneid' , how='inner').drop(['#query_name'],axis=1)
merged_df.to_csv('output.csv', index=False)
合并的_df的输出:

  KEGG_KOs        Geneid           Chr  Count
0   K00240  PROKKA_00019  k141_1000050    102
1   K00246  PROKKA_00020  k141_1000050    132
第2行和第3行只是读取txt文件(我假设它们是以制表符分隔的),并将它们保存为数据帧(df1和df2)。在第4行,我使用#query#u name和Geneid列合并df1和df2,然后删除#query#u name列。我将输出保存为csv,并删除索引(0,1)。如果要将合并的数据帧保存为制表符分隔的文件,只需将最后一行更改为:
merged\u df.to\u csv('output.txt',sep='\t',index=False)


如果您遇到一个键错误,这一定意味着您的文件格式可能有点不稳定(存在空格和制表符的混合)。此代码应适用于:

输入:

df1 = pd.read_csv('file1.txt', sep='\t')
df2 = pd.read_csv('file2.txt', sep='\t')
merged_df = df1.merge(df2, left_on='#query_name' , right_on='Geneid' , how='inner').drop(['#query_name'],axis=1)
merged_df.to_csv('output.csv', index=False)
import pandas as pd
def to_df(file):
    with open(file) as f:
        df = [line.strip().split() for line in f]
    return pd.DataFrame(df[1:], columns=df[0])
df1 = to_df('file1.txt')
df2 = to_df('file2.txt')
merged_df = df1.merge(df2, left_on='#query_name' , right_on='Geneid' , how='inner').drop(['#query_name'],axis=1)
merged_df.to_csv('output.csv', index=False)
输出:

  KEGG_KOs        Geneid           Chr Count
0   K00240  PROKKA_00019  k141_1000050   102
1   K00246  PROKKA_00020  k141_1000050   132

嗨,乔,谢谢你的回复。我在你的脚本中收到一条“KeyError”消息。回溯(最近一次调用):文件“*******”,第5行,在merged=genes.merge中(计数,左上='#query#u name',右上='Geneid',how='inner')。drop(['#query#u name',axis=1)。。。。文件“*******”,第1382行,_get_label_或_level_值raise KeyError(key)KeyError:“#query_name”您的文件看起来像是混合了空格和制表符,因此原始代码将一些列名分组在一起。我在答案中添加了另一个代码,可以纠正这个问题。