我正在从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
答案 0 :(得分:0)
一行中的一个或多个子字符串包含不属于'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])