Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 从json中取出键和值,以将行分隔开_Python_Json_Pandas_Optimization - Fatal编程技术网

Python 从json中取出键和值,以将行分隔开

Python 从json中取出键和值,以将行分隔开,python,json,pandas,optimization,Python,Json,Pandas,Optimization,我正在尝试从json中取出键和值,以在pandas中分隔行 我有: |---------------------|------------------| | session | scoring | |---------------------|------------------| | session1 | {id1:scoring1, | | | id2:scoring2, | |

我正在尝试从json中取出键和值,以在pandas中分隔行

我有:

|---------------------|------------------|
|      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