已知部分分子的smiles和分子量,怎么用rdkit lipinski批量计算类药性,并用0 1表示结果,结果写入原csv表格中
时间: 2024-05-14 07:12:03 浏览: 164
利用rdkit将smiles转化为原子坐标键数据,并用正则表达式将数据提取
以下是一种可能的解决方案,假设原csv表格中smiles列的名称为"SMILES",分子量列的名称为"MolecularWeight",并且需要计算的类药性指标为Lipinski的规则四个指标。
```python
import pandas as pd
from rdkit import Chem
from rdkit.Chem import Lipinski
# 读取原始csv表格
df = pd.read_csv('original.csv')
# 定义计算Lipinski指标的函数
def calculate_lipinski(smiles):
mol = Chem.MolFromSmiles(smiles)
mw = Chem.Descriptors.MolWt(mol)
if Lipinski.RuleOfFive(mol) and mw <= 500:
return 1
else:
return 0
# 批量计算Lipinski指标并写入原csv表格
df['Lipinski'] = df['SMILES'].apply(calculate_lipinski)
df.to_csv('updated.csv', index=False)
```
解释一下代码的过程:
1. 首先使用pandas库的`read_csv`函数读取原始csv表格,并将其存储在DataFrame对象`df`中。
2. 定义一个名为`calculate_lipinski`的函数,它接受一个SMILES字符串作为输入,并返回Lipinski规则是否成立的结果。该函数的具体实现如下:
a. 使用rdkit的`Chem.MolFromSmiles`函数将SMILES字符串转换为分子对象。
b. 使用rdkit的`Chem.Descriptors.MolWt`函数计算分子的分子量。
c. 应用Lipinski的规则五判断分子是否符合该规则。
d. 如果分子符合Lipinski的规则五且分子量小于等于500,返回1;否则返回0。
3. 使用pandas的`apply`方法批量应用`calculate_lipinski`函数到SMILES列中的每个SMILES字符串,将计算得到的结果存储到一个名为"Lipinski"的新列中。
4. 最后使用pandas的`to_csv`函数将更新后的DataFrame对象写入一个新的csv表格中,其中`index=False`表示不写入行索引。
阅读全文