python - 有没有更快的方法将大量字典转换为 pandas DataFrame?
问题描述
我有一个名为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
推荐阅读
- sql - SQL选择包含间隔中所有值的行
- javascript - 如何使用 POST 值更新我的数据表。ASP.NET
- cucumber - 在黄瓜数据表的步骤定义末尾放置一个冒号 (:) 是一个好习惯吗?
- string - 如何在 Julia 中使用零填充格式化整数?
- python - 当我想将 pygame 1.9.x 安装到 python 3 时发生错误
- javascript - Node.js axios 无错误提示程序停止运行
- javascript - Vue.js 组件嵌入到另一个组件时不会出现
- excel - 工作表和 VBA 中的 INDEX/MATCH 之间的区别
- reactjs - 超过 1 次测试时反应 Jest 测试警告
- android - AudioPlaybackCapture API 的策略不起作用