python - 有没有更快的方法将大量字典转换为 pandas DataFrame?

标签 python python-3.x pandas list dictionary

我有一个名为 list_of_dict 的字典列表,格式如下:

[{'id': 123, 'date': '202001', 'variable_x': 3},
 {'id': 345, 'date': '202101', 'variable_x': 4}, ... ]

要将其转换为 pandas DataFrame,我只需执行以下操作:

df = pd.DataFrame(list_of_dict)

它确实有效,但是当尝试对包含 2000 万个词典的列表执行此操作时,运行时间大约需要一个小时。

Python 有更快的方法来实现这一点吗?

最佳答案

在多种情况下,构建数据框的最快方法是字典列表。下面的时间显示了这一点。

从根本上将 20M 行读入内存将意味着大量使用虚拟内存和交换。我期望的主要优化来自分片并且不需要内存中的所有数据。

d = [{'id': 123, 'date': '202001', 'variable_x': 3},
 {'id': 345, 'date': '202101', 'variable_x': 4}]

c = d[0].keys()
r = 2*10**5
a = np.tile([list(l.values()) for l in d], (r,1))
d = np.tile(d, r)

%timeit pd.DataFrame(d)
%timeit pd.DataFrame(a, columns=c)
%timeit pd.DataFrame(a)
print(f"2D array size: {len(a):,}\ndict array size: {len(d):,}")

输出

53.4 µs ± 238 ns per loop (mean ± std. dev. of 7 runs, 10000 loops each)
90.6 ms ± 400 µs per loop (mean ± std. dev. of 7 runs, 10 loops each)
90.4 ms ± 1.45 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)
2D array size: 400,000
dict array size: 400,000

关于python - 有没有更快的方法将大量字典转换为 pandas DataFrame?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67448357/

相关文章:

python - 类继承 - 所有继承的方法都可以转换为子类类型吗?

python - 重新排列数据帧的索引以将字符串移至顶部

python - 如何找到两个 Pandas 数据帧的元素调和平均值

python - 如何将数据帧的列名(标题)加一

Python 创建数字序列并按组附加

python - 如何在 Azure 应用服务上运行 django manage.py 命令

python - 关闭opencv2中的特定窗口(框架)。使用python

Pythonic 方式查找与另一个字典中的键、值对匹配的字典

python - 通过webob.Response返回二进制数据

python - 关于如何在 tkinter 中制作 gif 动画的问题