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

2024-09-29 23:18:14 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试从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)

append_index = df.shape[0]

for index, row in df.iterrows():
    append_now = False
    for key, val in row['scoring'].items():
        if append_now:
            row['id'] = key
            row['score'] = val
            df.loc[append_index] = row
            append_index += 1

        else:
            df.loc[index,'id'] = key
            df.loc[index, 'score'] = val
        append_now = True

问题在于df由6行以上的mlm行组成,只迭代20行需要半小时。但当我限制前1k行时,它运行良好


Tags: idjsondfindexrowid3id2append
1条回答
网友
1楼 · 发布于 2024-09-29 23:18:14

不确定这是否更好,但您可能想尝试一下:

样品架

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

这个

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

但是可能表现更好

相关问题 更多 >

    热门问题