Объединить строки, если совпадают значения из двух файлов - Python - PullRequest
0 голосов
/ 25 сентября 2018

У меня есть два файла, file1 выглядит следующим образом:

#query_name KEGG_KOs
PROKKA_00019   K00240
PROKKA_00020   K00246
PROKKA_00022   K02887

file2:

Geneid  Chr Count
PROKKA_00019    k141_1000050    102
PROKKA_00020    k141_1000050    132
PROKKA_00021    k141_1000054    36

Если '#query_name' из file1 соответствует 'Geneid' из file2, то создать файл3это выглядит так:

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

Я не смог создать файл3, поэтому я написал следующее, но не смог заставить его работать.Другими вариантами может быть использование pandas.DataFrame.join , но я могу сказать, что все, что мне нужно, это простой скрипт.Любая помощь будет принята с благодарностью, спасибо.

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)

1 Ответ

0 голосов
/ 25 сентября 2018

Вот решение с использованием панд:

Ввод:

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)

Вывод merged_df:

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

Строки 2 и 3 просто читают в текстовом форматефайлы (я предполагаю, что они разделены табуляцией) и сохраняют их в виде панелей данных панд (df1 и df2).В строке 4 я объединяю df1 и df2, используя столбцы #query_name и Geneid, а затем удаляю столбец #query_name.Я сохраняю вывод в виде CSV, и индекс (0, 1) удаляется.Если вы хотите сохранить объединенный фрейм данных как файл с разделителями табуляции, вам нужно всего лишь изменить последнюю строку на: merged_df.to_csv('output.txt', sep='\t', 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...