You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何高效批量将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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 04:30:02