我正在尝试
文件1:
#query_name KEGG_KOs
10 PROKKA_00019 K00240
11 PROKKA_00020 K00246
12 PROKKA_00022 K02887
文件2:
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'
我在想可能是由于file1开头的空间。但是删除它和以前的数据框脚本创建的索引列并没有改变任何东西。任何人都有任何关于为什么或如何解决的线索?任何帮助将不胜感激,欢呼。
答案 0 :(得分:1)
您可以跳过第一行-csv的标题,并通过read_csv
中的参数names
设置新的列名称,然后像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)