我正在从CSV文件创建一个Numpy数组,它确实有效,但在for循环结束时它给出了上述错误。
我有一个5列的数据集,并一直在尝试创建一个Numpy数组。但是,一旦我将代码更改为:代码确实只与文件列一起使用:
values=[float(x) for x in line.split(',')[0:]]
在这里输入代码`它给我以下错误:
File "CNN_ambPressure.py", line 14, in <module>
values=[float(x) for x in line.split(',')[0:]]
File "CNN_ambPressure.py", line 14, in <listcomp>
values=[float(x) for x in line.split(',')[0:]]
ValueError: could not convert string to float:
import os
import numpy as np
from matplotlib import pyplot as plt
f=open('Folds5x2_pp.csv')
data=f.read()
f.close()
lines=data.split('\n')
header=lines[0].split(',')
lines=lines[1:]
float_data=np.zeros(((len(lines)),len(header)))
for i, line in enumerate(lines):
values=[float(x) for x in line.split(',')[0:]]
print(values)
我希望只有给定大小的Numpy数组的输出没有错误。我附上了一些图片,以显示当我选择从数据集中只有4列时它是如何工作的,以及当我选择从数据集中选择5列时它是如何工作的。
Code with the error after I changed line code #14 to have all column No error when I change to have only 4 columns
一行中的一个或多个子字符串包含不属于“float”的字符。例如,如果该行包含[]:
In [816]: line = '[1.23, 343.12, 343.2, 34.3]'
In [817]: [float(x) for x in line.split(',')]
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-817-a47cb4a24ec8> in <module>
----> 1 [float(x) for x in line.split(',')]
<ipython-input-817-a47cb4a24ec8> in <listcomp>(.0)
----> 1 [float(x) for x in line.split(',')]
ValueError: could not convert string to float: '[1.23'
In [818]: [float(x) for x in line.split(',')[1:-1]]
Out[818]: [343.12, 343.2]
In [819]: [float(x) for x in line[1:-1].split(',')]
Out[819]: [1.23, 343.12, 343.2, 34.3]
如果您接受它,您的任务是确定哪个子字符串有问题。您可以更改文本文件以更正它,或添加一些过滤以删除有问题的字符。
np.genfromtxt
是将csv文件加载到数组中的好方法。如果它无法将单元格转换为浮点数(默认dtype),则会将nan
放入数组中。这可能有助于隔离问题单元:
In [826]: np.genfromtxt([line], delimiter=',')
Out[826]: array([ nan, 343.12, 343.2 , nan])