我有一个名为 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/