python-3.x - Python / MDAnalysis SelectionError:选择失败:'无法将字符串转换为浮点数
问题描述
我是 Python 和 MDAnalysis 的新手。我正在尝试使用 MDAnalysis 进行分析。但是,我遇到了这个错误:
SelectionError: Selection failed: could not convert string to float 'cold'.
我想选择名为“BF4”、“EMI”和“TMA”的分子。选择取决于分子的 z 位置。我有cold
,cnew
但我无法将每个分子的 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
解决方案
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
推荐阅读
- java - 使用 Java 识别 *.properties 文件中的键=值对
- java - 运行可执行 jar 文件时,我有和 SQLException:没有为 jdbc:mysql://localhost:3306/DENTAL 找到合适的驱动程序
- c - 当我输入浮点数或字符串时,整数的 Scanf 无法按预期工作
- javascript - Mongoose - 转换为 ObjectId 失败,多个 ID
- javascript - DiscordJS:Userinfo 命令的问题
- python - 基于一个值添加新列
- c++ - 如何在 C++ 中打印下面的三角形图案?
- c++ - 刷新 std::cin 缓冲区
- java - 本地 Pubsub 模拟器不适用于 Dataflow
- powershell - Add-LocalGroupMember 在 windows server 2012 上未被识别为 cmdlet、函数、脚本或文件