json - 使用python将带有多个工作表的大文件excel读取到json
问题描述
我有一个大的 excel 文件,并且有多个 100 MB 的工作表
表 A
id | name | address
1 | joe | A
2 | gis | B
3 | leo | C
工作_1
id| call
1 | 10
1 | 8
2 | 1
3 | 3
工作_2
id| call
2 | 4
3 | 8
3 | 7
每个 id 所需的 json
data = { id: 1,
address: A,
name: Joe,
log : [{call:10}, {call:8 }]
}
data= { id: 2,
address: B,
name: Gis,
log : [{call:1}, {call:4}]
}
data= { id: 3,
address: C,
name: Leo,
log : [{call:3}, {call:8}, {call:7}]
}
我已经尝试过使用 pandas,但运行它需要 5 分钟,而且它只有 read_excel 没有任何处理。是否有任何解决方案可以使其更快以及如何获得所需的 json?
可能将过程分成块(但熊猫为 read_excel 删除了块大小)并添加一些线程以进行间隔,以便可以打印每个批次的过程。
解决方案
你可以做:
works=pd.concat([work1,work2],ignore_index=True)
mapper_works=works.groupby('id')[['call']].apply(lambda x: x.to_dict('records'))
dfa['log']=dfa['id'].map(mapper_works)
data=dfa.reindex(columns=['id','address','name','log']).to_dict('records')
print(data)
输出是每个 dict 的列表id
:
[{'id': 1, 'address': 'A', 'name': 'joe', 'log': [{'call': 10}, {'call': 8}]},
{'id': 2, 'address': 'B', 'name': 'gis', 'log': [{'call': 1}, {'call': 4}]},
{'id': 3, 'address': 'C', 'name': 'leo', 'log': [{'call': 3}, {'call': 8}, {'call': 7}]}
]
如果需要,可以分配给列:
dfa['dicts']=data
print(dfa)
id name address log \
0 1 joe A [{'call': 10}, {'call': 8}]
1 2 gis B [{'call': 1}, {'call': 4}]
2 3 leo C [{'call': 3}, {'call': 8}, {'call': 7}]
dicts
0 {'id': 1, 'address': 'A', 'name': 'joe', 'log'...
1 {'id': 2, 'address': 'B', 'name': 'gis', 'log'...
2 {'id': 3, 'address': 'C', 'name': 'leo', 'log'...
推荐阅读
- r - 在 R 中组合时间步长
- java - 从给定的未排序整数数组中查找最长连续元素序列的长度
- scala - scala - 读取时删除
- ios - 使用 @State 解析为在所有存储属性初始化之前使用的“自我”
- python - matplotlib 不尊重 zorder
- python - Mock.assert_has_calls() 没有按预期工作
- azure-cosmosdb - 更新 CRM 字段时逻辑应用程序出错
- php - php - 克隆输入字段后获取文件数据
- c# - 当手动运行与在服务器上运行时,SSIS 中的 Shell32 GetDetailsOf 调用返回不同的结果
- flutter - 如何在 Flutter 中将 JSON 转换为对象?