gpt4 book ai didi

python - 如何在不使用 for 循环的情况下将包含等长列表的字典列表转换为数据帧

转载 作者:行者123 更新时间:2023-12-01 07:39:37 24 4
gpt4 key购买 nike

我有由列表组成的字典列表(请参阅下面的示例代码)。我想做的是在不使用 for 循环的情况下创建一个数据框。任何替代的更快的方法都会很好。

ls = [ dict[lists], dict[lists], ... ]

最初我只是循环遍历字典列表并在列表理解中调用数据帧对象,然后将它们连接起来。请参阅下面的代码。但这对于我拥有的词典数量来说相当慢。

temp_data_m1 = [{'x': np.random.rand(9).tolist(), 'y': np.random.rand(9).tolist(), 'z': np.random.rand(9).tolist()}]*50    
data_reshuffled1 = pd.concat([pd.DataFrame(dict_) for dict_ in temp_data_m1]).reset_index()

有没有一种方法可以更快地实现这一点,也许不使用 for 循环?

最佳答案

您可以在字典理解中使用嵌套列表理解来首先转换原始数据。这假设 temp_data_m1 中的每个项目都具有相同的字典键。

# Sample data.
temp_data_m1 = [
{'x': np.random.rand(3).tolist(),
'y': np.random.rand(3).tolist(),
'z': np.random.rand(3).tolist()}] * 2

cols = temp_data_m1[0].keys()
df = pd.DataFrame(
{col: [val for group in temp_data_m1 for val in group[col]]
for col in cols}
)
>>> df
x y z
0 0.348319 0.404375 0.817278
1 0.887448 0.438613 0.368390
2 0.971582 0.533209 0.119674
3 0.348319 0.404375 0.817278
4 0.887448 0.438613 0.368390
5 0.971582 0.533209 0.119674

时间

temp_data_m1 = [
{'x': np.random.rand(3).tolist(),
'y': np.random.rand(3).tolist(),
'z': np.random.rand(3).tolist()}] * 20000

%%timeit
cols = temp_data_m1[0].keys()
pd.DataFrame({col: [val for group in temp_data_m1 for val in group[col]]
for col in cols})
# output: 22.8 ms ± 849 µs per loop (mean ± std. dev. of 7 runs, 10 loops each)

%timeit pd.concat([pd.DataFrame(dict_) for dict_ in temp_data_m1]).reset_index(drop=True)
# output: 11.6 s ± 396 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)

关于python - 如何在不使用 for 循环的情况下将包含等长列表的字典列表转换为数据帧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56798010/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com