【问题标题】:Merging data from two files that contain the same column - Python合并来自包含相同列的两个文件的数据 - Python
【发布时间】:2018-09-25 06:00:59
【问题描述】:

我正在尝试

文件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 开头的空间。但是删除它和以前的数据框脚本创建的索引列并没有改变任何东西。任何人都对为什么或如何解决有任何线索?任何帮助将不胜感激,干杯。

【问题讨论】:

  • 什么返回 print (file1.columns.tolist())
  • @jezrael 你好,它返回:['#query_name KEGG_KOs']

标签: python pandas dataframe join merge


【解决方案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)

【讨论】:

  • 很好,但是它返回: Empty DataFrame Columns: [Geneid, KEGG_KOs, Chr, Count] Index: []
  • @gwrathe - 你能检查file1 是否返回 2 列填充正确数据的列,就像我的答案一样?
  • 它创建了一个额外的 'NaN's 列:Geneid KEGG_KOs 0 10 PROKKA_00019 K00240 NaN 1 11 PROKKA_00020 K00246 NaN 2 12 PROKKA_00022 K02887 NaN
  • @gwrathe - 似乎空格是分隔符,file1 = pd.read_csv('file1.txt', sep="\s+", skiprows=1, names=['Geneid','KEGG_KOs']) 工作如何?
猜你喜欢
  • 2019-10-02
  • 1970-01-01
  • 2020-09-26
  • 1970-01-01
  • 1970-01-01
  • 2012-02-24
  • 1970-01-01
  • 2019-07-31
  • 2022-12-12
相关资源
最近更新 更多