将包含字典的嵌套元组扁平化为数据框的最快方法

时间:2019-09-04 16:33:19

标签: python pandas

我有一些数据作为元组列表,并试图找到最快的方法将其转换为Pandas数据框。

出于我们的目的,列表的长度大约为20个项目。每个元组只有两个元素,第一个是小数,第二个是字典。该词典将至少有一对,但可能有多个键(str)值(十进制)对。

以下示例:

bids = [(Decimal('10421.53'), {'d59133e6-891b-4d95-9744-046effe12096': Decimal('3')}), (Decimal('10422.87'), {'b6a51d83-f8a7-4401-b596-6abe55c5e554': Decimal('2')}), (Decimal('10424.03'), {'fbb471ad-44dc-49e8-845a-85035542115d': Decimal('2'), 'fe7e784e-2c5a-414f-9094-ca3c94aae19f': Decimal('2.5')}), (Decimal('10424.3'), {'82478287-6bde-4a0c-8283-34d0b0537479': Decimal('0.45')}), (Decimal('10424.31'), {'1d63cd02-e446-457c-89ce-7e88e1a0345a': Decimal('0.49834487')}), (Decimal('10424.32'), {'bf0b2eda-75da-4aff-a1ac-ccf36f198bd4': Decimal('0.24776675')}), (Decimal('10426.01'), {'4d12abd1-9330-4688-964e-07e5f5aa2b77': Decimal('1.21363179')}), (Decimal('10426.02'), {'613b7639-23bd-4953-9efd-0d96ef100789': Decimal('2')}), (Decimal('10426.07'), {'bd05a81a-1725-483b-80eb-2ce4b7aa843c': Decimal('0.0031')}), (Decimal('10426.12'), {'4210f639-5d54-49cb-a658-4f866e52b906': Decimal('2'), 'a31807bc-4109-4ba3-ae9a-4b04b3e650b1': Decimal('0.27650338'), '4d3bc7fd-3955-4e4a-ad46-ac688460f5be': Decimal('0.01'), 'ce85aa0b-abcf-4072-a7e7-5ec9cc9fa95f': Decimal('0.58784957'), '2d3a1f90-52b4-4d5b-8d29-4e2ba50c6447': Decimal('0.20332366')})]

精美打印:

enter image description here

我有一个基本的循环结构可以做到这一点:

results = []
for bid in bids:
    for oid, amt in bid[1].items():
        results.append({'price': bid[0], 'amount': amt, 'order': oid})
result = pd.DataFrame(results)

数据框结果:

enter image description here

有没有嵌套循环的更快方法吗?预先感谢!

1 个答案:

答案 0 :(得分:0)

您的方法很好,尽管列表理解可以提高性能:

final=pd.DataFrame([{'price': bid[0], 'amount': amt, 'order': oid} 
          for bid in bids for oid, amt in bid[1].items()])

       price      amount                                 order
0   10421.53           3  d59133e6-891b-4d95-9744-046effe12096
1   10422.87           2  b6a51d83-f8a7-4401-b596-6abe55c5e554
2   10424.03           2  fbb471ad-44dc-49e8-845a-85035542115d
3   10424.03         2.5  fe7e784e-2c5a-414f-9094-ca3c94aae19f
4    10424.3        0.45  82478287-6bde-4a0c-8283-34d0b0537479
5   10424.31  0.49834487  1d63cd02-e446-457c-89ce-7e88e1a0345a
6   10424.32  0.24776675  bf0b2eda-75da-4aff-a1ac-ccf36f198bd4
7   10426.01  1.21363179  4d12abd1-9330-4688-964e-07e5f5aa2b77
8   10426.02           2  613b7639-23bd-4953-9efd-0d96ef100789
9   10426.07      0.0031  bd05a81a-1725-483b-80eb-2ce4b7aa843c
10  10426.12           2  4210f639-5d54-49cb-a658-4f866e52b906
11  10426.12  0.27650338  a31807bc-4109-4ba3-ae9a-4b04b3e650b1
12  10426.12        0.01  4d3bc7fd-3955-4e4a-ad46-ac688460f5be
13  10426.12  0.58784957  ce85aa0b-abcf-4072-a7e7-5ec9cc9fa95f
14  10426.12  0.20332366  2d3a1f90-52b4-4d5b-8d29-4e2ba50c6447