python - 从 json 中取出键和值来分隔 pandas 中的行
问题描述
我正在尝试从 json 中取出键和值来分隔熊猫中的行
我有:
|---------------------|------------------|
| 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} | | |
|---------------------|------------------|---------------------|------------------|
我使用的代码:(迭代行和 jsons,如果 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 行时,它运行良好
解决方案
不确定这是否效果更好,但您可能想尝试一下:
样品架
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
但可能表现更好。
推荐阅读
- python - 从 2 个 uint64 值中提取 Spooky-hash 128 位值
- r - 使用 R 并行处理 XML 节点
- javascript - 不能在 Typescript 和 Webpack 项目中使用 square/js-jose (jose-jwe-jws) npm 包
- php - Symfony 3 - 我在管理我的角色时遇到了一些困难
- powershell - 移除所有 Sitecore 节点的发布限制
- lightbox2 - 灯箱图像 X 关闭按钮 对齐图像右上角
- reporting-services - SSRS 报告行可见性在不应该显示详细记录时显示
- javascript - 验证 var 是否存在
- c# - 需要模式实现的建议以将“处理器”从 WebApp 注入 NuGet
- javascript - Python EEL:在脚本运行期间更改按钮标签