首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么在Pandas中没有原生的字符串折叠?

为什么在Pandas中没有原生的字符串折叠?
EN

Stack Overflow用户
提问于 2015-08-11 03:35:53
回答 1查看 105关注 0票数 0

我正在构建一个应用程序,用于将SQL数据库读取到Pandas中进行分析。数据是“中等数据”--太大,一台计算机(8GB RAM)无法存储在内存中。我真的不想要不断地旋转AWS实例的成本和麻烦,并且获得更强大的硬件是困难的(我是在非营利的),所以我想优化我自己的数据读取内存成本。

我花了很长时间从mobify:http://www.mobify.com/blog/sqlalchemy-memory-magic/实现这个解决方案

特别是方法3:他们使用一个字典来存储所有唯一的字符串值。这避免了保存相同字符串值的对象的重复,方法是传递对同一字符串的引用。我使用了他们的代码并实现了它,其结果令人印象深刻(根据数据片的不同,内存使用量减少了2-10倍)。

这是非常直截了当的,以至于我搞不懂为什么潘达斯没有这样的本土化。我是Pandas世界的一个菜鸟,但在大型数据集中复制字符串似乎是一个特定的时代。在DataFrames中默认的字符串折叠有什么缺点吗?我是不是漏掉了什么?

TL;博士的弱点是熊猫的高记忆成本。字符串折叠似乎是显著减少内存开销的一种简单方法。为什么它没有?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-08-11 03:55:14

熊猫的确有类似的内置形式的分类。它们可能只适用于数量相对较少的唯一字符串,但通过将每个唯一字符串映射为数字代码并存储这些代码来节省内存使用,例如:

代码语言:javascript
运行
复制
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: int64
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31932767

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档