今天再利用含cid的文件再pubchem网站获取smiles时发现,网站会自行删除重复cid而只输出一个smile
为解决这个问题想了如下办法.
1.直接将获取到的txt转为csv与原csv合并:
import pandas as pd
import sys
df = pd.read_csv(r'file')
df_old = pd.read_csv(r'file_old')
df_out = pd.merge(df,df_old)
df_out.to_csv(r'file_outcome')
但是利用每个虽然能合并表格添加smile列,取同时会破坏原表结构,如
因为获取到的csv的CID列是只有数字的,因为merge的默认方式是inner 只有两表都存在的数据才会有单元格出现.
merge 函数内部存在两个参数:一个是确定merge的key列.如我们上述没写其实就是默认为以两表共同的colunm列为key列进行merge
另外一个参数是methon参数 表示merge的方法,有:inner ,outer(只要单个表中有出现的key单元格行就会出现再merge的合成表中),left(左连接),right(右连接).
还有一种方式,是以所获取得file为本,确立字典 (即cid与smiles之间的对应关系),在以此关系确立新的smile列
import pandas
import sys
df = pd.read_csv(r'file')
df_old = pd.read_csv(r'file_old')
dic = dict(zip(df.PUBCHEMCID,df.SMLILES))
df_old['SMILES'] = df_old['PUBCHEM_CID'].map(lambda x:dic[x])