在python中使用正态分布和CSV

在python中使用正态分布和CSV,python,python-3.x,Python,Python 3.x,我有一个.csv文件,每个人的平均值和标准偏差。我创建了一个函数来读取文件并创建字典 def read_data(): f = open("data.csv","r") reader = csv.reader(f) for row in reader: data[row[0]] = (float(row[1]),float(row[2])) return data 这个的输出是 {'Person 1': (50.0, 0.0), 'Person

我有一个.csv文件,每个人的平均值和标准偏差。我创建了一个函数来读取文件并创建字典

def read_data():
    f = open("data.csv","r")
    reader = csv.reader(f)
    for row in reader:
        data[row[0]] = (float(row[1]),float(row[2]))
    return data
这个的输出是

{'Person 1': (50.0, 0.0), 'Person 2': (100.0, 10.0), 'Person 3': (100.0, 5.0)}
我想写一个函数,它取每个人的平均值和标准偏差,并使用正态分布生成一个随机数。我希望输出类似于

{'Person 1': (*random number*), 'Person 2': (*random number*), 'Person 3': (*random number*)}

提前谢谢。

您可以使用
random.gauss
。给定一个人的平均值和标准偏差,您可以根据正态分布创建一个随机值,如下所示

from random import gauss

data = {'Person 1': (50.0, 0.0), 'Person 2': (100.0, 10.0), 'Person 3': (100.0, 5.0)}
# Randomize values based on a normal distribution
rand_data = {k: gauss(mu=v[0], sigma=v[1]) for k,v in data.items()} 

# mu specifies mean and sigma specifies standard deviation
或者,如果您已经计划使用
numpy
,可以使用
numpy.random.normal

from numpy.random import normal

data = {'Person 1': (50.0, 0.0), 'Person 2': (100.0, 10.0), 'Person 3': (100.0, 5.0)}
# Randomize values based on a normal distribution
rand_data = {k: normal(loc=v[0], scale=v[1]) for k,v in data.items()} 

# loc specifies mean and scale specifies standard deviation   
每个测试的结果给出了以下正在运行的Python 3.7:

{'Person 1': 50.0, 'Person 2': 104.66767928603309, 'Person 3': 90.49432247610861}

你试过什么吗?到底是什么问题?看看这个模块,你可以使用高斯函数。你能澄清一下这个问题吗?您希望随机数介于平均值和1、2之间还是标准偏差的某个增量之间?这里不需要使用
numpy
random.gauss
来自标准库-这并不是真正的“更好”,但这意味着安装依赖性减少了一个,并且numpy可能需要很长时间才能导入。它的好处并没有在这里真正使用。只是在发布后才意识到。谢谢更新。