首页 > 解决方案 > 使用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 删除了块大小)并添加一些线程以进行间隔,以便可以打印每个批次的过程。

标签: jsonexcelpython-3.xpandasmultithreading

解决方案


你可以做:

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

推荐阅读