如何将ZINC数据库的smi文件转为DataFrame?现有代码显示异常
解决SMI文件转Pandas DataFrame的显示问题
问题根源
你用readlines()读取文件时,会保留每行末尾的换行符\n,导致DataFrame里的SMILES字符串携带多余换行标记,进而引发显示异常。另外,不少SMI文件是SMILES字符串+化合物ID的两列格式,直接按单列表格处理也会出错。
修正方案
方案1:处理单列SMI文件(仅含SMILES字符串)
如果你的SMI文件每行只有一个SMILES字符串,修改代码去除换行符即可:
import pandas as pd smiles_file_path = "你的文件路径.smi" # 读取文件并清除每行末尾的换行符 with open(smiles_file_path, 'r') as f: smiles_list = [line.strip() for line in f.readlines()] # 生成DataFrame df = pd.DataFrame({'SMILES': smiles_list}) # 显示前5行验证结果 print(df.head())
方案2:读取带ID的SMI文件(常见格式)
如果你的SMI文件是SMILES 化合物ID的两列结构,直接用Pandas的read_csv更高效:
import pandas as pd smiles_file_path = "你的文件路径.smi" # 指定空格为分隔符,自定义列名 df = pd.read_csv(smiles_file_path, sep=' ', names=['SMILES', 'Compound_ID']) # 输出完整数据 print(df)
额外排查建议
- 若文件存在空行,可添加过滤逻辑:
smiles_list = [line.strip() for line in f if line.strip()] - 若出现编码错误,读取时指定编码:
open(smiles_file_path, 'r', encoding='utf-8')
内容的提问来源于stack exchange,提问作者metonia mari
相关产品推荐
相关产品推荐

