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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了将数据从CSV转换为numpy数组时出错相关的知识,希望对你有一定的参考价值。

我正在从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('
')
    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])

以上是关于将数据从CSV转换为numpy数组时出错的主要内容,如果未能解决你的问题,请参考以下文章

如何将csv文件转换为numpy数组格式?

将列表列表的字符串转换为 Numpy 数组

将 numpy 数组转换为 CSV 字符串,将 CSV 字符串转换回 numpy 数组

如何将 .csv 文件中的数据转换为 NumPy 数组并使用统计数据来查找数据的平均值? [复制]

为啥将 numpy 数组转换为 csv 文件不显示属性名称,而是将第一行值作为属性名称?

对数据进行去均值并转换为 numpy 数组