Python 使用.csv文件将字符串转换为浮动并生成直方图
我使用.cvs文件从数据生成直方图。它有类似这样的数据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
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行是什么?我不知道你的行数。如果你的数据真的像你说的,那几乎是不可能的。你确定数字之间没有逗号而不是空格吗?