如何从含字典元素的大型numpy数组创建pandas DataFrame且低内存占用?
解决方法
可以用生成器表达式避免将整个numpy数组转换为列表,这种惰性迭代的方式不会额外占用大量内存,直接传递给pd.DataFrame即可:
import numpy as np import pandas as pd # 你的目标numpy数组 my_array = np.array([{'col1': 'somevalue', 'col2': 2}, {'col1': 'someotherval', 'col2': 4}, {'col1': 'zzzzz', 'col2': 47}], dtype=object) # 生成目标DataFrame df = pd.DataFrame(x for x in my_array)
生成的结果完全符合预期:
| col1 | col2 |
|---|---|
| somevalue | 2 |
| someotherval | 4 |
| zzzzz | 47 |
原理说明
生成器表达式(x for x in my_array)不会一次性把所有字典加载到内存,而是逐个返回数组元素,处理大型数组时,内存占用和原numpy数组基本一致,不会产生额外的列表内存开销。
你也可以用pd.DataFrame.from_records搭配生成器,效果相同:
df = pd.DataFrame.from_records(x for x in my_array)
内容的提问来源于stack exchange,提问作者zven3498
相关产品推荐
相关产品推荐

