gpt4 book ai didi

python - 高效地将一系列字典转换为 DataFrame

转载 作者:太空宇宙 更新时间:2023-11-04 02:50:46 26 4
gpt4 key购买 nike

我有一个大的(ish)系列 词典,我想将其“展平”。为了测试/重现我的问题,我创建了一个具有类似结构的 Series:

>>> my_series = pd.Series([{'A': [1], 'B' : []}, {'A' : [1, 2], 'B' : [3, 4]}])
>>> my_series
0 {u'A': [1], u'B': []}
1 {u'A': [1, 2], u'B': [3, 4]}
dtype: object

下一步是将其转换为具有分层索引的“DataFrame”。我找到了一种有效的方法:

>>> pd.DataFrame(pd.DataFrame.from_dict(row, orient='index').stack() for row in my_series)
A B
0 1 0 1
0 1.0 NaN NaN NaN
1 1.0 2.0 3.0 4.0

这给了我想要的东西,但在我的实际数据集上它非常慢,30,000 行需要大约 60 秒,每个列表中有 0-4 个元素,并且使用大约 8G RAM。

我已经尝试使用并行 map 操作和 multiprocessing 模块来加快处理速度,但我想在这里问问是否有更好的方法。

我能否在更合理的时间内达到与上述相同的结果?

最佳答案

您可以使用DataFrame 构造函数,但首先通过valuesSeries 转换为numpy 数组然后到 list:

a = pd.DataFrame(my_series.values.tolist())
print (a)
A B
0 [1] []
1 [1, 2] [3, 4]

然后可以使用 flatennig concat使用列表理解:

b = pd.concat([pd.DataFrame(a[x].values.tolist()) for x in a.columns], axis=1,keys=a.columns)
print (b)
A B
0 1 0 1
0 1 NaN NaN NaN
1 1 2.0 3.0 4.0

如果转换为 numpy 数组更快:

In [93]: %timeit pd.DataFrame(list(my_series))
1000 loops, best of 3: 550 µs per loop

In [94]: %timeit pd.DataFrame(my_series.values.tolist())
1000 loops, best of 3: 516 µs per loop

关于python - 高效地将一系列字典转换为 DataFrame,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43950791/

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