【问题标题】:read large file excel with multiple worksheet to json with python使用python将带有多个工作表的大文件excel读取到json
【发布时间】:2020-03-05 14:50:35
【问题描述】:

我有一个很大的 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?

也许将进程划分为块(但 pandas 删除了 read_excel 的块大小)并添加一些线程以进行间隔,以便可以打印每批的过程。

【问题讨论】:

    标签: json excel python-3.x pandas multithreading


    【解决方案1】:

    你可以这样做:

    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)
    

    输出是每个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'...  
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-01-01
      • 2015-09-20
      • 2015-10-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多