我在python中没有经验,我需要对数据集进行最后一次修改。我的数据如下:
"bone": {
"SEV": 12,
"ER": 16,
"FAM": 177
},
"fracture": {
"SEV": 76
},
"chest pain": {
"ER": 6
},
它是大量的键,每个键都有1到10个左右的标签。我想要做的是将数字改为概率。所以,例如,
"bone": {
"SEV": .05,
"ER": .07,
"FAM": .86
},
因此,总结标签的总和,然后将每个标签的值除以总和。我不确定如何以有效的方式迭代这些。
编辑:代码我正在尝试而不是正常工作with open('probability.json') as data_file:
data = json.load(data_file)
loadedd = json.loads(data)
def calculate_percentage(labels):
total = float(sum(labels.values()))
return {k: v / total for k,v in labels.items()}
for section in loadedd:
section = calculate_percentage(section)
给出错误
obj, end = self.raw_decode(s, idx=_w(s, 0).end())
TypeError: expected string or buffer
答案 0 :(得分:1)
您必须对这些值求和并将每个项目除以此总和:
def calculate_percentage(labels):
total = float(sum(labels.values()))
return {k: v / total for k,v in labels.items()}
print calculate_percentage({
"SEV": 12,
"ER": 16,
"FAM": 177
})
结果
{'SEV': 0.05853658536585366, 'ER': 0.07804878048780488, 'FAM': 0.8634146341463415}
答案 1 :(得分:1)
如果您使用字典词典,请使用 -
dict = { 'a' : { 'SEV' : 12 , 'ER' : 6 } }
您可以使用类似 -
的内容for k, v in dict.iteritems():
vtot = sum(v.values())
for k1,v1 in vtot.iteritems():
vtot[k1] = v1 / vtot
答案 2 :(得分:1)
{'bone': {'SEV': 0.05853658536585366, 'ER': 0.07804878048780488, 'FAM': 0.8634146341463415}}
将打印出一个以百分比为键的新词典:
re.sub
答案 3 :(得分:1)
有两个问题。
由于尾随逗号,您的文档无效json文档。有效文件如下所示:
"bone": {
"SEV": 12,
"ER": 16,
"FAM": 177
},
"fracture": {
"SEV": 76
},
"chest pain": {
"ER": 6
}
你也是两次调用json库方法,这是一对多。只需一个电话即可:
with open('probability.json') as data_file:
data = json.load(data_file)
assert isinstance(data, dict)
之后,您应该可以按如下方式对数据进行后处理:
for section in data.keys():
section_total = float(sum(data[section].itervalues()))
data[section] = {k: v / section_total for k,v in labels.iteritems()}