从.csv文件中绘制Python中的正态分布
以下这个脚本可以绘制某种数据的正态分布。
import numpy as np
import scipy.stats as stats
import pylab as pl
h = sorted ([0.9, 0.6, 0.5, 0.73788,...]) #Data that I would like to change
fit = stats.norm.pdf(h, np.mean(h), np.std(h))
pl.plot(h,fit,'-o')
pl.show()
我想知道怎么从一个.csv文件中读取数据来绘图,而不是手动输入数据。假设我想要的数据在某个.csv文件的第二列,我知道可以通过创建一个中间文件来提取这些数据,但也许这样做并不是必要的。
with open('infile.csv','rb') as inf, open('outfile.csv','wb') as outf:
incsv = csv.reader(inf, delimiter=',')
outcsv = csv.writer(outf, delimiter=',')
outcsv.writerows(row[1] in incsv)
总之,我这里有两个主要问题,
- 我这样写能正确地把.csv文件的第二列写入一个新的.csv文件吗?
- 我该怎么把这两个脚本合并,这样我就可以把第一个脚本中的静态数据替换成.csv文件中某一列的数据呢?
1 个回答
4
把数据写回文件,然后再读回来,听起来有点绕。为什么不直接创建一个数据列表呢?
def import_data(filename):
"""Import data in the second column of the supplied filename as floats."""
with open(filename, 'rb') as inf:
return [float(row[1]) for row in csv.reader(inf)]
然后你可以调用这个函数来获取你想要绘制的数据。
h = sorted(import_data('infile.csv'))
至于你的问题 "我是否正确地将一个.csv文件的第二列写入一个新的.csv文件?",答案是:试试看就知道了。