Python - 将列表的字符串值转换为浮点值

时间:2017-04-23 14:59:47

标签: python string floating-point

我想存储list的浮点值。这些值是从csv文件中提取的。

我写的代码:

import numpy as np

import csv
from sklearn import datasets, metrics
from sklearn.model_selection import train_test_split
from neupy import algorithms, environment

environment.reproducible()

data1 = open('data.csv','r').read().split("\n")

target1 = open('target.csv','r').read().split("\n")

x1 = [[float(n) for n in e] for e in data1 ]
y1 = [[float(s) for s in f] for f in target1 ]
x_train, x_test, y_train, y_test = train_test_split(x1,y1,train_size=0.7)

pnn = algorithms.PNN(std=10,verbose=False)

pnn.train(x_train, y_train)
y_predicted = pnn.predict(x_test)
print(metrics.accuracy_score(y_test, y_predicted))

我遇到的错误是:

WARNING (theano.configdefaults): g++ not detected ! Theano will be 
unable to execute optimized C-implementations (for both CPU and GPU) 
and will default to Python implementations. Performance will be 
severely degraded. To remove this warning, set Theano flags cxx to
an empty string.

Traceback (most recent call last):
  File "C:\Users\pc\AppData\Local\Programs\Python\Python36-32\pnn-3.py", line 16, in <module>
    x1 = [[float(n) for n in e] for e in data1 ]
  File "C:\Users\pc\AppData\Local\Programs\Python\Python36-32\pnn-3.py", line 16, in <listcomp>
    x1 = [[float(n) for n in e] for e in data1 ]
  File "C:\Users\pc\AppData\Local\Programs\Python\Python36-32\pnn-3.py", line 16, in <listcomp>
    x1 = [[float(n) for n in e] for e in data1 ]
ValueError: could not convert string to float: '.'

1 个答案:

答案 0 :(得分:3)

当你这样做时:

data1 = open('data.csv','r').read().split("\n")

data1字符串

的列表

那么你这样做:

x1 = [[float(n) for n in e] for e in data1 ]

你在字符串上迭代,然后在字符串的字符上。所以转换(种类)适用于第一个浮点数的第一个数字,然后.上的扼流圈(例如:"3.1416"3转换为浮点数(以滑稽的方式工作) ),但是你遇到.,幸运的是失败了。)

您只是忘了根据csv分隔符拆分行。

我会使用csv模块将行拆分为行并执行:

with open('data.csv','r') as f:
   cr = csv.reader(f,delimiter=";")  # change to whatever your delimiter is
   x1 = [[float(n) for n in row] for row in cr]