Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用.csv文件将字符串转换为浮动并生成直方图_Python_Csv_Numpy_Matplotlib_Python 3.5 - Fatal编程技术网

Python 使用.csv文件将字符串转换为浮动并生成直方图

Python 使用.csv文件将字符串转换为浮动并生成直方图,python,csv,numpy,matplotlib,python-3.5,Python,Csv,Numpy,Matplotlib,Python 3.5,我使用.cvs文件从数据生成直方图。它有类似这样的数据 102.919 103.36 102.602 103.05 104.106 104.57 108.791 109.26 104.045 104.52 104.324 104.77 105.106 105.57 102.619 103.08 102.124 102.6 这是我写的代码 # histplot.py import numpy as np

我使用.cvs文件从数据生成直方图。它有类似这样的数据

    102.919 103.36
    102.602 103.05
    104.106 104.57
    108.791 109.26
    104.045 104.52
    104.324 104.77
    105.106 105.57
    102.619 103.08
    102.124 102.6
这是我写的代码

# histplot.py
        import numpy as np
        import matplotlib.pyplot as plt
        import csv

        with open('datafile.csv', 'rU') as data:
            reader = csv.DictReader(data, delimiter=' ', quoting=csv.QUOTE_NONNUMERIC)
            for line in reader:
                t = float(line)
                data.append(t)
            reader.close()

# generate the histogram
        hist, bin_edges=np.histogram(data, bins=50, range=[80,135])


# generate histogram figure
        plt.hist(data, bin_edges)
        plt.savefig('chart_file', format="pdf")
        plt.show()
运行此代码会给我一个错误ValueError:无法将字符串转换为float:'102.919103.36' 有人能帮我提供一些关于使用csv文件将字符串转换为浮点的想法吗。
先谢谢你

首先
将open('datafile.csv','rU')作为数据:
意味着您获取
数据作为文件句柄。您可以将此文件句柄用作iterable,但不能向其追加任何内容

第二个
csv.DictReader
提供对数据的字典访问。在本例中,我建议使用
csv.reader
,它以
列表的形式访问数据

第三,不能将整行
(可能是字典或列表)转换为浮点。您只能使用列表中的单个元素来执行此操作。(这就是错误的来源。)转换为float甚至没有必要,因为读者已经处理好了

现在,您可以简单地将元素逐行附加到初始为空的列表中,并将该列表提供给直方图函数

import numpy as np
import matplotlib.pyplot as plt
import csv

data = [] #create empty list
with open('datafile.csv', 'rU') as f:
    reader = csv.reader(f, delimiter=' ', quoting=csv.QUOTE_NONNUMERIC)
    for line in reader:
        data.extend(line)

# generate the histogram
hist, bin_edges=np.histogram(data, bins=50, range=[80,135])


# generate histogram figure
plt.hist(data, bin_edges)
#plt.savefig('chart_file', format="pdf")
plt.show()
让我只提一下,整个数据读取可以用一种更简单的方式完成,使用
numpy.loadtxt

此外,如果不需要进行进一步的数据处理,可以简化柱状图的绘制

import numpy as np
import matplotlib.pyplot as plt

data = np.loadtxt('datafile.csv').flatten()

plt.hist(data, bins=50, range=[80,135])

plt.show()

在进行建议的更改后,它会像以前一样产生相同的错误。我非常怀疑,因为首先产生错误的行(
float(line)
)在更改的脚本中不存在。如果报告错误,请始终包括引发错误的行。回溯(最近一次调用):文件“C:\Users\JINAY\AppData\Local\Programs\Python\Python35\testfile.py”,第10行,在for line in reader:ValueError:无法将字符串转换为float:“102.919103.36”返回的此错误是,但在这种情况下,第10行是什么?我不知道你的行数。如果你的数据真的像你说的,那几乎是不可能的。你确定数字之间没有逗号而不是空格吗?