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

如何利用ChEMBL API批量下载指定ChEMBL ID分子的目标描述符?

批量获取ChEMBL分子指定描述符的实现方案

依赖准备

先安装所需的Python库:

pip install chembl-webresource-client pandas

完整代码实现

import pandas as pd
from chembl_webresource_client.new_client import new_client
import time

# 读取你的ChEMBL ID列表CSV
# 替换成你的文件名,确保ID列名正确(示例用'chembl_id')
raw_df = pd.read_csv('your_chembl_ids.csv')
target_ids = raw_df['chembl_id'].tolist()

# 初始化ChEMBL API客户端
mol_client = new_client.molecule

# 定义需要提取的描述符(对应API字段名)
required_desc = [
    'tpsa',
    'num_h_acceptors',
    'num_h_donors',
    'cx_acidic_pka',
    'cx_basic_pka',
    'qed'
]

def fetch_mol_descriptors(chembl_id):
    """单分子描述符获取函数,含异常处理"""
    try:
        mol_info = mol_client.get(chembl_id)
        # 提取目标描述符,缺失值自动填充为NaN
        desc_data = {key: mol_info.get(key, None) for key in required_desc}
        desc_data['chembl_id'] = chembl_id
        return desc_data
    except Exception as err:
        print(f"⚠️ {chembl_id} 获取失败: {str(err)}")
        # 返回含ID的空值行,保证结果完整性
        return {**{key: None for key in required_desc}, 'chembl_id': chembl_id}

# 批量获取,添加短延时避免API限流
desc_results = []
for cid in target_ids:
    desc_results.append(fetch_mol_descriptors(cid))
    time.sleep(0.1)  # 可根据情况调整延时时间

# 合并原始数据与描述符,保存结果
result_df = pd.DataFrame(desc_results)
final_df = pd.merge(raw_df, result_df, on='chembl_id', how='left')
final_df.to_csv('chembl_descriptors_output.csv', index=False)

关键说明

  • 字段映射:你要求的描述符与ChEMBL API字段的对应关系:
    • TPSA → tpsa
    • NumHAcceptors → num_h_acceptors
    • NumHDonors → num_h_donors
    • CX Acidic pKa → cx_acidic_pka
    • CX Basic pKa → cx_basic_pka
    • qed → qed
  • CSV列名:如果你的CSV中存储ChEMBL ID的列不是chembl_id,请修改代码中对应变量名
  • API限流:ChEMBL API有请求频率限制,添加time.sleep(0.1)能避免被暂时封禁,若处理上千条ID可适当延长延时
  • 异常处理:代码会跳过获取失败的分子并打印错误信息,保证整体任务不会中断

内容的提问来源于stack exchange,提问作者LePe77it

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 19:06:29