简体   繁体   English

将字典列表列表转换为数据帧 arrays 列表

[英]Convert list of lists of dictionaries into list of arrays of dataframes

I have this list, which contains lists of dictionaries:我有这个列表,其中包含字典列表:

my_list = [
  [{'id': '1D1', 'name_id': 'Ethan', 'manager': 'John', 'employee_details': None},
  {'id': '1D2', 'name_id': 'Kevin', 'manager': 'Helen', 
'employee_details': "(EmployeeDetail(id='1D2.0', partner='Jenny', children = ['Eva']),)"},
 {'id': '1D3', 'name_id': 'Richard', 'manager': 'Robert',
  'employee_details': "(EmployeeDetail(id='1D3.0', partner='Roberta', children= ['Noah', 'Elvis']),)"}
],
[{'id': '1D4', 'name_id': 'Liam', 'manager': 'John', 'employee_details': None},
  {'id': '1D5', 'name_id': 'William', 'manager': 'Benjamin',
  'employee_details': "(EmployeeDetail(id='1D5.0', partner='Emma', children = ['Amelia']),)"}
]
  ]

Expected output, list of arrays:预期 output,arrays 列表:

[array([['1D1', 'Ethan', 'John', None],
        ['1D2', 'Kevin', 'Helen',
         "(EmployeeDetail(id='1D2.0', partner='Jenny', children = ['Eva']),)"],
        ['1D3', 'Richard', 'Robert',
         "(EmployeeDetail(id='1D3.0', partner='Roberta', children= ['Noah', 'Elvis']),)"]],
       dtype=object), 
array([['1D4', 'Liam', 'John', None],
        ['1D5', 'William', 'Benjamin',
         "(EmployeeDetail(id='1D5.0', partner='Emma', children = ['Amelia']),)"]

I can achieve the expected output with the following code:我可以使用以下代码实现预期的 output:

import pandas as pd
import numpy as np
my_arrays = [np.array(pd.DataFrame(l)) for l in my_list.__iter__()]

%timeit my_arrays = [np.array(pd.DataFrame(l)) for l in my_list.__iter__()]

881 µs ± 24.4 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)每个循环 881 µs ± 24.4 µs(7 次运行的平均值 ± 标准偏差,每次 1000 个循环)

My problem is that I would like to do this in a more efficient way, because my actual data have thousands of nested lists and it requires a big amount of time to run.我的问题是我想以更有效的方式执行此操作,因为我的实际数据有数千个嵌套列表,并且需要大量时间来运行。 Is there any better way to achieve this result?有没有更好的方法来达到这个结果? Thank you very much!非常感谢!

I don't think it gets much faster than a nested list comprehension.我认为它不会比嵌套列表理解快得多。 pandas isn't necessary here. pandas在这里不是必需的。

result = [np.array([list(d.values()) for d in sublist]) for sublist in my_list]  

This assumes all your dictionaries share the same ordering (eg 'id' is always first).这假设您所有的字典共享相同的顺序(例如'id'始终是第一个)。

Just use nested list comprehension:只需使用嵌套列表理解:

out = [[np.array(list(d.values())) for d in lst] for lst in my_list]

On my machine,在我的机器上,

%timeit -n 100000 [[np.array(list(d.values())) for d in lst] for lst in my_list]
16.4 µs ± 896 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)


%timeit -n 100000 [np.array(pd.DataFrame(l)) for l in my_list.__iter__()]
1.1 ms ± 247 µs per loop (mean ± std. dev. of 7 runs, 100000 loops each)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM