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

问题描述 投票:0回答:1

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

numpy dataset python-3.6
1个回答
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])
© www.soinside.com 2019 - 2024. All rights reserved.