Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如果(微笑)字符串中的字母不是元素列表中的字母,则筛选行_Python_Python 3.x_Jupyter Notebook_Bioinformatics - Fatal编程技术网

Python 如果(微笑)字符串中的字母不是元素列表中的字母,则筛选行

Python 如果(微笑)字符串中的字母不是元素列表中的字母,则筛选行,python,python-3.x,jupyter-notebook,bioinformatics,Python,Python 3.x,Jupyter Notebook,Bioinformatics,问题 如果字符串中的任何字母(原子)对大写字母不敏感,来自元素的数据帧H、He、Li、Be、B,如何过滤掉SMILES字符串?这是一个被截断的列表,其中有80个 背景 我有一个包含字符串的数据库: 简化分子输入行输入系统(SMILES)是一种线符号形式的规范,用于使用短ASCII字符串描述化学物种的结构 (更多信息) 其目的是从数据库中去除稀有元素和有机金属 我从一个字符串开始,在进入数据帧之前测试代码。我编写循环来测试字符串中的字符 strings = "[O+]#C[Ni-4](C

问题

如果字符串中的任何字母(原子)对大写字母不敏感,来自元素的数据帧
H、He、Li、Be、B
,如何过滤掉SMILES字符串?这是一个被截断的列表,其中有80个

背景

我有一个包含字符串的数据库:

简化分子输入行输入系统(SMILES)是一种线符号形式的规范,用于使用短ASCII字符串描述化学物种的结构

(更多信息)

其目的是从数据库中去除稀有元素和有机金属

我从一个字符串开始,在进入数据帧之前测试代码。我编写循环来测试字符串中的字符

strings = "[O+]#C[Ni-4](C#[O+])(C#[O+])C#[O+]"
list = ['Ni']
for i in list:
    if i in strings:
        print(i)

如何在数据帧上迭代并过滤?

对于列表/简化版本,执行相反的操作。使用列表查找字符串中的匹配项

strings = "[O+]#C[Ni-4](C#[O+])(C#[O+])C#[O+]"
list = ['Ni', 'Sc']

for i in list:
    if i in strings:
        print(i)
else:
    print('nah')

> Ni
> nah
要在数据帧上循环,请使用
np.where

df = pd.DataFrame({'smiles': ['sdflk', '[O+]#C[Ni-4](C#[O+])(C#[O+])C#[O+]']})
list = ['Ni', 'Sc']

df['element'] = np.where(df.smiles.str.contains('|'.join(list)), 1, 0) # mark element that contains string in the list as 1, else 0
df[df['element'] == 1] # remove rows that have the element
请注意,当数据帧包含类似于字符串的
Sc1
时,这将是一个问题,其中
S
c
实际上是指简单芳环上的硫和碳,而不是钪
Sc
。因此,我们需要一种方法来识别
Sc
,并且只在没有附加数字的情况下识别消极前瞻将在这里帮助我们

df['Sc'] = df['smiles'].str.match('Sc(?!\d)')

那么你的问题是什么?您从程序中获得了哪种输出?如果您检查
i
包含的内容,您会发现您的方法有问题:
for i in strings
一次只获取一个字符。@usr2564301谢谢!我根据你的提示写了一个答案