Слияние данных из двух файлов, содержащих один и тот же столбец - Python

1

Я пытаюсь

file1:

     #query_name KEGG_KOs
10  PROKKA_00019   K00240
11  PROKKA_00020   K00246
12  PROKKA_00022   K02887

file2:

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

file3 (желаемый результат):

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

Кажется, это правильный скрипт:

import pandas as pd
file1 = pd.read_csv('file1.txt', sep="\t")
file2= pd.read_csv('file2.txt', sep="\t")
file3= pd.merge(file1, file2, left_on='#query_name', right_on='Geneid').drop(['#query_name'],axis=1)
print(merged)

Однако он возвращает сообщение:

Traceback (most recent call last):
  File "**FilePath**C", line 4, in <module>
    merged = pd.merge(genes, counts, left_on='#query_name', right_on='Geneid').drop(['#query_name'],axis=1)
  File "**FilePath**", line 61, in merge
    validate=validate)
  File "**FilePath**", line 551, in __init__
    self.join_names) = self._get_merge_keys()
  File "**FilePath**", line 871, in _get_merge_keys
    lk, stacklevel=stacklevel))
  File "**FilePath**", line 1382, in _get_label_or_level_values
    raise KeyError(key)
KeyError: '#query_name'

Я думал, это может быть из-за пространства в начале файла1. Но удаление его и индексный столбец, созданный предыдущим сценарием DataFrame, ничего не изменили. Кто-нибудь знает, почему и как исправить? Любая помощь будет принята с благодарностью, приветствия.

Изображение 174551

  • 1
    Что вернуть print (file1.columns.tolist()) ?
  • 0
    @jezrael Привет еще раз, он возвращает: ['#query_name KEGG_KOs']
Теги:
pandas
dataframe
join
merge

1 ответ

1
Лучший ответ

Вы можете пропустить первую строку - заголовок CSV и установить новые столбцы имена от параметров names в read_csv, затем установите тот же столбец, как в file2, поэтому drop не надо:

file1 = pd.read_csv('file1.txt', sep="\t", skiprows=1, names=['Geneid','KEGG_KOs'])
print (file1)
          Geneid KEGG_KOs
10  PROKKA_00019   K00240
11  PROKKA_00020   K00246
12  PROKKA_00022   K02887

file2= pd.read_csv('file2.txt', sep="\t")

file3= pd.merge(file1, file2, on='Geneid')
print(merged)
  • 0
    Хорошо, однако, он возвращает: Пустые столбцы DataFrame: [Geneid, KEGG_KOs, Chr, Count] Индекс: []
  • 0
    @gwrathe - Можете ли вы проверить file1 если верните 2 столбца, заполненных правильными данными, как в моем ответе?
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню