Python的 - 从字符串转换负小数浮动(Python - Convert negative de

2019-10-17 13:08发布

我需要在大量的.txt文件,其中的每一个包含一个十进制(一些是积极的,有些是负的)来读取,并追加到这些2门阵列(基因型和表型)。 随后,我想在SciPy的这些阵列执行一些数学运算,但是负(“ - ”)符号导致的问题。 具体来说,我不能转换阵列浮动,因为“ - ”被理解为一个字符串,引起以下错误:

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

['-0.0448022516321286', '-0.0236187263814157', '-0.150505384829925', '-0.00338459268479522', '0.0142429109897682', '0.0286253352284279', '-0.0462358095345649', '0.0286232317578776', '-0.00747425206137217', '0.0231790239373428', '-0.00266935581919541', '0.00825077426011094', '0.0272744527203547', '0.0394829854063242', '0.0233109171715023', '0.165841084392078', '0.00259693465334536', '-0.0342590874424289', '0.0124600520095644', '0.0713627590092807', '-0.0189374898081401', '-0.00112750710611284', '-0.0161387333242288', '0.0227226505624106', '0.0382173405035751', '0.0455518646388402', '-0.0453048799717046', '0.0168570746329513']

Answer 1:

这个问题似乎是与您的错误消息,空字符串或空间明显

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_arrayphen_array有空间,这将抛出一个错误,而转换为浮动

可能有很多原因,像空字符串

  • 空或空行
  • 空白行或者在开始或结束


Answer 2:

这个问题绝对不是在负号。 Python的转换带负号的字符串没有问题。 我建议你运行的每个条目针对浮动正则表达式,看看它们全部通过。



Answer 3:

没有什么错误消息表明-就是问题所在。 最可能的原因是, gene_array和/或phen_array包含一个空字符串( '' )。

正如文件中指出, linecache.getline()

将返回''上的错误(终止换行符将被包含于所发现的线)。



文章来源: Python - Convert negative decimals from string to float