Python-将字符串中的负小数转换为浮点
我需要读入大量的.txt文件,每个文件都包含一个十进制数(一些是正的,一些是负的),然后将它们附加到2个数组中(基因型和表型)。随后,我希望在scipy中对这些数组执行一些数学运算,但是负('-')符号会导致问题。具体来说,我无法将数组转换为float,因为'-'被读取为字符串,导致以下错误:Python-将字符串中的负小数转换为浮点,python,string,decimal,Python,String,Decimal,我需要读入大量的.txt文件,每个文件都包含一个十进制数(一些是正的,一些是负的),然后将它们附加到2个数组中(基因型和表型)。随后,我希望在scipy中对这些数组执行一些数学运算,但是负('-')符号会导致问题。具体来说,我无法将数组转换为float,因为'-'被读取为字符串,导致以下错误: ValueError: could not convert string to float: 以下是我目前编写的代码: import linecache gene_array=[] phen_arra
ValueError: could not convert string to float:
以下是我目前编写的代码:
import linecache
gene_array=[]
phen_array=[]
for i in genotype:
for j in phenotype:
genotype='/path/g.txt'
phenotype='/path/p.txt'
g=linecache.getline(genotype,1)
p=linecache.getline(phenotype,1)
p=p.strip()
g=g.strip()
gene_array.append(g)
phen_array.append(p)
gene_array=map(float,gene_array)
phen_array=map(float,phen_array)
在这一点上,我相当确定是负面迹象导致了问题,但我不清楚原因。这里的问题是我使用Linecache吗?有没有更好的替代方法
结果
print gene_array
是
错误消息中没有任何内容表明问题出在
-
。最可能的原因是gene_array
和/或phen_array
包含空字符串('
)
如文档中所述,linecache.getline()
将在出现错误时返回”
(找到的行将包含终止换行符)
这个问题绝对不是负面的。Python可以毫无问题地转换带负号的字符串。我建议您针对float RegEx运行每个条目,看看它们是否都通过了。从错误消息中可以看出,问题似乎是空字符串或空格
ValueError: could not convert string to float:
要使其工作,请将地图转换为列表
gene_array=[float(e) for e in gene_array if e]
phen_array=[float(e) for e in phen_array if e]
用空字符串表示
float(“”
或float(“”
将给出值错误,因此如果gene\u数组
或phen\u数组
中的任何项都有空格,这将在转换为float时引发错误
可能有很多原因导致像这样的空字符串
- 空行还是空行
- 开头或结尾的空行
“-123.45”
这样的字符串可以浮点数,但是“-123.45”
不能。你能打印基因数组和phen数组吗?也许您的文本文件是空的,您试图float
一个空字符串?我怀疑这是您的实际代码-在当前形式下,当您在循环内部定义变量时,它会在for I in genetic
上抛出UnboundLocalError;另外,你从来没有在任何地方使用过i
或j
。@jr:你也可以打印phen\u数组
?我可以map(float,gene\u数组)
很好……你能解释一下“g和/或p末尾的空字符串”是什么意思吗?每个字符串的结尾都有一个空字符串--在开头和结尾都有一个空字符串。。。OP只是在读第1行(一遍又一遍),这是可疑的…p=p.strip()(etc)应该处理好空白,不是吗?@mgilson:我的措辞很糟糕。我的意思是gene\u array
和phen\u array
,我说的是g
和p
@NPE--啊,我现在跟着。是的,一个空字符串可能会有问题——但我不知道OP使用linecache的方式会有什么问题(除非文件中不存在该行)。无论如何,OP似乎对我们并不完全诚实……:)不需要做条带
,它已经在生成原始列表时完成了。@markransem:同意我错过了那部分谢谢-这就成功了。是的,为了可读性,我必须压缩代码。非常感谢!
gene_array=[float(e) for e in gene_array if e]
phen_array=[float(e) for e in phen_array if e]