Python 从json中取出键和值,以将行分隔开
我正在尝试从json中取出键和值,以在pandas中分隔行 我有:Python 从json中取出键和值,以将行分隔开,python,json,pandas,optimization,Python,Json,Pandas,Optimization,我正在尝试从json中取出键和值,以在pandas中分隔行 我有: |---------------------|------------------| | session | scoring | |---------------------|------------------| | session1 | {id1:scoring1, | | | id2:scoring2, | |
|---------------------|------------------|
| session | scoring |
|---------------------|------------------|
| session1 | {id1:scoring1, |
| | id2:scoring2, |
| | id3:scoring3} |
|---------------------|------------------|
| session2 | {id4:scoring4, |
| | id5:scoring5} |
|---------------------|------------------|
我想得到:
|---------------------|------------------|---------------------|------------------|
| session | scoring | id | score |
|---------------------|------------------|---------------------|------------------|
| session1 | {id1:scoring1, | id1 | score1 |
| | id2:scoring2, | | |
| | id3:scoring3} | | |
|---------------------|------------------|---------------------|------------------|
| session1 | {id1:scoring1, | id2 | score2 |
| | id2:scoring2, | | |
| | id3:scoring3} | | |
|---------------------|------------------|---------------------|------------------|
| session1 | {id1:scoring1, | id3 | score3 |
| | id2:scoring2, | | |
| | id3:scoring3} | | |
|---------------------|------------------|---------------------|------------------|
| session2 | {id4:scoring4, | id4 | score4 |
| | id5:scoring5} | | |
|---------------------|------------------|---------------------|------------------|
| session2 | {id4:scoring4, | id5 | score5 |
| | id5:scoring5} | | |
|---------------------|------------------|---------------------|------------------|
我使用的代码:(迭代行和json,如果id首先在json中,那么将其放在相邻的单元格中,否则创建新行并附加到df)
问题在于df由6行以上的mlm行组成,只迭代20行需要半小时。但当我限制前1k行时,它运行良好不确定是否更好,但您可能想尝试一下: 样品架
data = [[{'id1': 'score1', 'id2': 'score2', 'id3': 'score3'}],
[{'id4': 'score4', 'id5': 'score5'}]]
df = pd.DataFrame(data, index=['session1', 'session2'])
看起来像
0
session1 {'id1': 'score1', 'id2': 'score2', 'id3': 'score3'}
session2 {'id4': 'score4', 'id5': 'score5'}
这个
复制您的结果
1 2
0
session1 id1 score1
session1 id2 score2
session1 id3 score3
session2 id4 score4
session2 id5 score5
但是可能会表现得更好。这个问题的第二个答案可能会有所帮助。谢谢!它不到一分钟就解决了我的任务。据我所知,问题出在“iterrows()”上,它对于庞大的数据帧来说太慢了。@Evgeny谢谢你的反馈,我很高兴能帮上忙。我不完全确定使用
iterrows()
是否是唯一的原因。我怀疑对一个已经很大的数据帧的持续修改也可能是次优的。
data_new = [[session, id, score]
for session, scores in zip(df.index, df[0])
for id, score in scores.items()]
df = pd.DataFrame(data_new)
df.set_index(0, inplace=True)
1 2
0
session1 id1 score1
session1 id2 score2
session1 id3 score3
session2 id4 score4
session2 id5 score5