将数据从CSV转换为numpy数组时出错

时间:2019-03-30 21:00:00

标签: numpy dataset python-3.6

我正在从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

1 个答案:

答案 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])