我正在构建一个应用程序,用于将SQL数据库读取到Pandas中进行分析。数据是“中等数据”--太大,一台计算机(8GB RAM)无法存储在内存中。我真的不想要不断地旋转AWS实例的成本和麻烦,并且获得更强大的硬件是困难的(我是在非营利的),所以我想优化我自己的数据读取内存成本。
我花了很长时间从mobify:http://www.mobify.com/blog/sqlalchemy-memory-magic/实现这个解决方案
特别是方法3:他们使用一个字典来存储所有唯一的字符串值。这避免了保存相同字符串值的对象的重复,方法是传递对同一字符串的引用。我使用了他们的代码并实现了它,其结果令人印象深刻(根据数据片的不同,内存使用量减少了2-10倍)。
这是非常直截了当的,以至于我搞不懂为什么潘达斯没有这样的本土化。我是Pandas世界的一个菜鸟,但在大型数据集中复制字符串似乎是一个特定的时代。在DataFrames中默认的字符串折叠有什么缺点吗?我是不是漏掉了什么?
TL;博士的弱点是熊猫的高记忆成本。字符串折叠似乎是显著减少内存开销的一种简单方法。为什么它没有?
发布于 2015-08-11 03:55:14
熊猫的确有类似的内置形式的分类。它们可能只适用于数量相对较少的唯一字符串,但通过将每个唯一字符串映射为数字代码并存储这些代码来节省内存使用,例如:
import pandas as pd
import random
df = pd.DataFrame({'strs': [random.choice(['banana', 'pineapple', 'orange']) for i in range(100000)]})
df['catted'] = pd.Categorical(df['strs'])
df.memory_usage()
Out[10]: 
strs      800000
catted    100024
dtype: int64https://stackoverflow.com/questions/31932767
复制相似问题