Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用第三个csv文件作为映射,在另一个csv文件中查找一个csv文件中的值_Python_R_Csv_Numpy_Pandas - Fatal编程技术网

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

Python 使用第三个csv文件作为映射,在另一个csv文件中查找一个csv文件中的值,python,r,csv,numpy,pandas,Python,R,Csv,Numpy,Pandas,我不太清楚如何表述这个问题,欢迎提出改进标题的建议 我有三个文件:e_data.csv、t_data.csv和e2d.csv。我想将e\u id、t\u id、gene\u name和value合并到一个文件中,如所需的\u result.csv所示。天真的方法如下: 对于e_data.csv中的每一行,提取e_id和value 检查与给定的e\u id对应的t\u id的e2t.csv 检查与给定的t\u id对应的gene\u name的t\u data.csv 将它们全部合并到一个文件中

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

我有三个文件:e_data.csv、t_data.csv和e2d.csv。我想将
e\u id
t\u id
gene\u name
value
合并到一个文件中,如所需的\u result.csv所示。天真的方法如下:

  • 对于e_data.csv中的每一行,提取
    e_id
    value
  • 检查与给定的
    e\u id
    对应的
    t\u id
    的e2t.csv
  • 检查与给定的
    t\u id
    对应的
    gene\u name
    的t\u data.csv
  • 将它们全部合并到一个文件中
  • 请参见以下示例了解我试图实现的目标:

    e_data.csv:

    e2t.csv:

    t_data.csv:

    所需的_result.csv:


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

    使用加载所有CSV后,只要列名一致,就可以迭代加载它们:

    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上匹配。

    使用加载所有CSV后,只要列名一致,您就可以迭代加载它们:

    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上匹配。

    感谢您的快速回复!我在尝试执行t_data.merge(e2t.merge(e_data))时得到一个空数据帧。但是列名与您的答案中的列名相同。然而,合并e2t和e_数据是可行的。我会查看有关合并的文档,也许我做错了什么。我会查看每个合并的输出,也不一定需要合并整个df来调试它,例如,
    e2t.iloc[:5]。merge(e_data.iloc[:5])
    将只合并前5行。出于某种原因,在我的示例中,e2t和t_数据不会合并,这与问题中的数据相同。我不在乎两个文件中t_id列的位置不同,对吗?然而,在我的真实数据上,它是有效的,我不得不说,与我的纯python解决方案相比,它是闪电般的快。position不在乎,我会检查列名,看看拼写是否相同
    e2t.columns.tolist()
    t\u date.columns.tolist()
    好的,我只是尝试了这个,数据类型必须匹配,否则你会得到一个空的df,这就是你的问题谢谢你的快速回复!我在尝试执行t_data.merge(e2t.merge(e_data))时得到一个空数据帧。但是列名与您的答案中的列名相同。然而,合并e2t和e_数据是可行的。我会查看有关合并的文档,也许我做错了什么。我会查看每个合并的输出,也不一定需要合并整个df来调试它,例如,
    e2t.iloc[:5]。merge(e_data.iloc[:5])
    将只合并前5行。出于某种原因,在我的示例中,e2t和t_数据不会合并,这与问题中的数据相同。我不在乎两个文件中t_id列的位置不同,对吗?然而,在我的真实数据上,它是有效的,我不得不说,与我的纯python解决方案相比,它是闪电般的快。position不在乎,我会检查列名,看看拼写是否相同
    e2t.columns.tolist()
    t\u date.columns.tolist()
    好的,我只是尝试了这个,数据类型必须匹配,否则你会得到一个空的df,这就是你的问题
      t_id gene_name
       10     Gene1
       24     Gene2
       32     Gene3
    
      gene_name t_id e_id value
         Gene1   10    1   110
         Gene2   24    2   240
         Gene3   32    3   370
    
    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