Python 使用第三个csv文件作为映射,在另一个csv文件中查找一个csv文件中的值
我不太清楚如何表述这个问题,欢迎提出改进标题的建议 我有三个文件:e_data.csv、t_data.csv和e2d.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\u id
、t\u id
、gene\u name
和value
合并到一个文件中,如所需的\u result.csv所示。天真的方法如下:
e_id
和value
e\u id
对应的t\u id
的e2t.csvt\u id
对应的gene\u name
的t\u data.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