从另一个csv文件中的一个csv文件中查找值,使用第三个csv文件作为映射

时间:2015-09-29 11:06:03

标签: python r csv numpy pandas

我不太清楚如何制定这个问题,欢迎提出改进标题的建议。

我有三个文件: e_data.csv t_data.csv e2d.csv 。我想将e_idt_idgene_namevalue合并到一个文件中,如 desired_result.csv 所示。天真的方法如下:

  1. 对于 e_data.csv 中的每一行,请摘录e_idvalue
  2. 检查 e2t.csv ,其中t_id与给定的e_id对应。
  3. 检查 t_data.csv 哪个gene_name对应于给定的t_id
  4. 将它们全部合并到一个文件中。
  5. 请参阅以下示例,了解我正在努力实现的目标:

    e_data.csv:

       e_id  value
         1    110
         2    240
         3    370
    

    e2t.csv:

       e_id  t_id
         1    10
         2    24
         3    32
    

    t_data.csv:

      t_id gene_name
       10     Gene1
       24     Gene2
       32     Gene3
    

    desired_result.csv:

      gene_name t_id e_id value
         Gene1   10    1   110
         Gene2   24    2   240
         Gene3   32    3   370
    

    使用哪种工具或语言没有限制,但我更喜欢使用Python,因为这是我最熟悉的。 R也可以是一种选择。我已经用纯Python实现了一个解决方案,但数据集相当大,我希望像Pandas或Numpy这样的东西可以加快速度。谢谢!

1 个答案:

答案 0 :(得分:4)

使用read_csv加载所有csv后,只要列名一致,就可以迭代merge

In [149]:
merged = t_data.merge(e2t.merge(e_data))
merged

Out[149]:
   t_id gene_name  e_id  value
0    10     Gene1     1    110
1    24     Gene2     2    240
2    32     Gene3     3    370

以上工作原理默认情况下会尝试合并匹配的列名并执行内部合并,因此列值必须匹配lhs和rhs。