如何高效批量将Entrez ID映射转换为对应的Uniprot ID?
Entrez ID批量转Uniprot ID高效实现方案
核心逻辑:避免逐行遍历匹配,使用基于哈希的键值查询或数据表关联操作,时间复杂度可从逐行匹配的O(n*m)降至O(n+m),40万行数据通常可在10秒内完成处理。
方案1:Python Pandas实现(最高效,推荐优先使用)
处理流程:
- 读取原始PPI表和ID映射表
- 构建Entrez ID到Uniprot ID的哈希字典,单次查询耗时为O(1)
- 批量替换PPI表中两列蛋白ID
- 导出结果
代码示例:
import pandas as pd # 读取数据,大体积Excel建议提前转存为CSV格式,读取速度可提升5-10倍 ppi_df = pd.read_excel("你的原始PPI文件路径.xlsx") map_df = pd.read_excel("你的ID映射表路径.xlsx") # 构建映射字典,参数替换为你自己表中对应的列名 id_mapper = dict(zip(map_df["Entrez_ID列名"], map_df["Uniprot_ID列名"])) # 批量替换两列蛋白ID ppi_df["互作蛋白A列名"] = ppi_df["互作蛋白A列名"].map(id_mapper) ppi_df["互作蛋白B列名"] = ppi_df["互作蛋白B列名"].map(id_mapper) # 可选操作:删除未匹配到Uniprot ID的无效行 ppi_df = ppi_df.dropna(subset=["互作蛋白A列名", "互作蛋白B列名"]) # 导出结果 ppi_df.to_excel("转换完成的PPI文件.xlsx", index=False)
提示:如果存在单个Entrez ID对应多个Uniprot ID的情况,可先对映射表按Entrez ID分组,将对应多个Uniprot ID用分号拼接后再生成映射字典,避免数据丢失。
方案2:R语言实现(生信领域常用)
代码示例:
library(readxl) library(dplyr) # 读取数据 ppi_df <- read_excel("你的原始PPI文件路径.xlsx") map_df <- read_excel("你的ID映射表路径.xlsx") # 两次左关联完成ID替换,替换为对应列名 ppi_df <- ppi_df %>% left_join(map_df, by = c("互作蛋白A列名" = "Entrez_ID列名")) %>% rename(蛋白A_Uniprot = Uniprot_ID列名) %>% left_join(map_df, by = c("互作蛋白B列名" = "Entrez_ID列名")) %>% rename(蛋白B_Uniprot = Uniprot_ID列名) # 导出结果 writexl::write_xlsx(ppi_df, "转换完成的PPI文件.xlsx")
方案3:无代码Excel实现(适合无编程基础场景)
使用VLOOKUP函数批量匹配,40万行数据处理耗时约1-5分钟:
- 在PPI表新增空白列,输入公式:
=VLOOKUP(当前行蛋白A的Entrez ID单元格, 映射表!Entrez列:Uniprot列, 2, FALSE) - 下拉公式应用到所有行,蛋白B列按相同逻辑操作
- 匹配完成后选中两列新数据,右键选择「粘贴为值」后保存即可
内容的提问来源于stack exchange,提问作者hpPh
相关产品推荐
相关产品推荐

