Python 使用for循环读取json dict并写入数据帧
我试图迭代一个JSON dict并将所选对象写入pandas数据帧,然后在最后计算两列之间的相关性 数据帧应如下所示:Python 使用for循环读取json dict并写入数据帧,python,json,pandas,Python,Json,Pandas,我试图迭代一个JSON dict并将所选对象写入pandas数据帧,然后在最后计算两列之间的相关性 数据帧应如下所示: calc val 20.1 20 20.2 20 19.8 20 ... ... 10.1 10 10.3 10 9.8 10 ... ... 5.2 5 5.1 5 5.0 5 ... ... { "20um PSL": [ { "imgs
calc val
20.1 20
20.2 20
19.8 20
... ...
10.1 10
10.3 10
9.8 10
... ...
5.2 5
5.1 5
5.0 5
... ...
{
"20um PSL": [
{
"imgsize": 20.886688245888603,
"trigsize": 20.87416236786009,
...
}
"imgsize": 20.886688245888603,
"trigsize": 20.87416236786009,
...
{...}
...
]
"10um PSL": [
{
"imgsize": 10.886688245888603,
"trigsize": 10.87416236786009,
....
}
{...}
...
]
"5um PSL": [
{
"imgsize": 5.886688245888603,
"trigsize": 5.87416236786009,
....
}
{...}
...
]
}
我的JSON dict如下所示:
calc val
20.1 20
20.2 20
19.8 20
... ...
10.1 10
10.3 10
9.8 10
... ...
5.2 5
5.1 5
5.0 5
... ...
{
"20um PSL": [
{
"imgsize": 20.886688245888603,
"trigsize": 20.87416236786009,
...
}
"imgsize": 20.886688245888603,
"trigsize": 20.87416236786009,
...
{...}
...
]
"10um PSL": [
{
"imgsize": 10.886688245888603,
"trigsize": 10.87416236786009,
....
}
{...}
...
]
"5um PSL": [
{
"imgsize": 5.886688245888603,
"trigsize": 5.87416236786009,
....
}
{...}
...
]
}
这是我目前的代码:
sizes = ['20um PSL', '10um PSL', '5um PSL']
for file in json_data[sizes[0]]:
particles_0 = pd.DataFrame({'calc': file['trigsize'], 'val': sizes_list[0]})
for file in json_data[sizes[1]]:
particles_1 = pd.DataFrame({'calc': file['trigsize'], 'val': sizes_list[1]})
for file in json_data[sizes[2]]:
particles_2 = pd.DataFrame({'calc': file['trigsize'], 'val': sizes_list[2]})
df = particles_0.append([particles_1, particles_2])
df.reset_index(drop=True, inplace=True) # reorder index
我的困难在于,不知何故,始终只有最后一个“trigsize”值加载到数据帧中。我知道这在某种程度上是我的循环的一个错误,我需要更改迭代。由于我是Python初学者,我似乎没有找到这个问题的逻辑解决方案。
最后,我需要计算Calc中的数字如何与val相关的相关性(在本例中总是20、10、5)。有没有更好的解决办法?(而不是创建数据帧?)
迄今为止的数据帧:
calc val
20.1 20
20.1 20
20.1 20
... ...
10.1 10
10.1 10
10.1 10
... ...
5.0 5
5.0 5
5.0 5
... ...
在我看来,循环的每一次迭代都会覆盖你的粒子。这也解释了为什么只剩下最后一行 您可能必须首先收集您在dict或类似文件中迭代的数据,然后在完成所有操作后构建数据框架 编辑:
嗨,克里斯蒂安。是的,我知道我正在以某种方式覆盖我最后的数据。但我的大脑似乎已经无法建立逻辑循环了。你有什么建议吗?我自己还不专业,但我会这样做:
data=[]size=['20um PSL'、'10um PSL'、'5um PSL']对于大小为大小的文件:对于json_数据中的文件[size]:data.append((file['trigsize'],size\u list[0])df=pd.DataFrame(数据,索引=[“calc”,“val]”)
很抱歉-我不知道如何标记此代码以使其正确可读。我将其作为编辑添加到我的主要答案中。谢谢!它起了作用。我必须在大小列表中添加一个计数器变量,以便将其附加到正确的大小:数据=[]大小=['20um PSL',10um PSL',5um PSL']w=0表示大小:表示json_数据中的文件[size]:data.append((file['trigsize',y_verifcsize[w])w+=1 df=pd.DataFrame(data,columns=[“calc”,“val”])
(如果您可以添加计数器,我会将其标记为answerd:)这是真的-我忽略了其他变量的索引。谢谢,我添加了它:)