首页 > 解决方案 > Python / MDAnalysis SelectionError:选择失败:'无法将字符串转换为浮点数

问题描述

我是 Python 和 MDAnalysis 的新手。我正在尝试使用 MDAnalysis 进行分析。但是,我遇到了这个错误:

SelectionError: Selection failed: could not convert string to float 'cold'.

我想选择名为“BF4”、“EMI”和“TMA”的分子。选择取决于分子的 z 位置。我有coldcnew但我无法将每个分子的 z 坐标值与这两个值进行比较,因为它们被视为字符串而不是浮点数。

请你帮助我好吗?非常感谢

  with MDAnalysis.Writer("tube.xtc",tube.n_atoms) as W: 
     t=50 
     with open('lineCNT16.gro','w') as f: 
        for ts in universe.trajectory: 
           W.write(tube) 
           tube = sum(sorted(tube, key=lambda x: x.position[2]))  
           lobf = [] 
           chunk = 40 
           for i in range(len(tube) // 40):  # how many times can we chunk the tube? 
            piece = tube[i*chunk:(i+1)*chunk]  # this is selecting [0:20] first, then [20:40] etc 
            position = piece.positions.mean(axis=0) 
            lobf.append(position) 

           print (ts,lobf) 
           mol=29627 
           f.write('Generated by trjconv : Ionic liquid simulation t=  '"%s\n"%t) 
           f.write('18\n') 
           f.write('    1C08      C29626   4.247   4.253   7.544\n') 
           cold = 7.544 
           for position in lobf: 
            a=position[0]/10   
            b=position[1]/10 
            c=position[2]/10 
            cnew=c 
            print(cnew) 
            f.write('    1C08      ')     
            f.write('C')   
            f.write("%0.8s"%mol) 
            f.write('   ')      
            f.write("%0.5s"%a)  
            f.write('   ') 
            f.write("%0.5s"%b)   
            f.write('   ') 
            f.write("%0.5s\n"%c) 
            mol=mol+1 
            BF4=universe.atoms.select_atoms("resname BF4 and prop z >= cold and prop z<= cnew") 
            #EMI=universe.atoms.select_atoms("resname EMI and prop z >= cold and prop z<= cnew") 
            #TMA=universe.atoms.select_atoms("resname TMA and prop z >= cold and prop z<= cnew") 
            #print(EMI) 
            #print(BF4) 
            #print(TMA) 
            cold=cnew 
           f.write('    1C08      C29643   4.247   4.253   12.64\n')  
           f.write('6.15000   6.20000  20.18420\n') 
           t=t+50.00000   
           mol=29627 

标签: python-3.xstringmdanalysis

解决方案


BF4=universe.atoms.select_atoms("resname BF4 and prop z >= cold and prop z<= cnew") 

MDAnalysis 需要实际值(浮点数,如 5.7)而不是字符串(“冷”)。它告诉您它需要一个数字而不是字符串。例如:

BF4=universe.atoms.select_atoms("resname BF4 and prop z >= 5.2 and prop z<= 7.5"

您有一个变量“冷”,但是您可能需要提高您的技能,了解如何将您的选择字符串与该变量连接起来。

这是一个解释它的小教程: https ://www.pythonforbeginners.com/concatenation/string-concatenation-and-formatting-in-python


推荐阅读