【问题标题】:Error when converting data from CSV to numpy array将数据从 CSV 转换为 numpy 数组时出错
【发布时间】:2019-03-30 20:59:59
【问题描述】:

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

一行中的一个或多个子字符串包含不属于“浮点数”的字符。例如,如果该行包含 []:

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

【讨论】:

  • 非常感谢,我已经开始隔离子串了。非常感谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-03-20
  • 1970-01-01
  • 1970-01-01
  • 2013-05-05
  • 1970-01-01
  • 2019-09-09
  • 1970-01-01
相关资源
最近更新 更多