为什么Pandas身上没有天然的折线呢?

2024-06-16 14:14:56 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在构建一个应用程序,将SQL数据库中的数据读取到Pandas中进行分析。数据是“中等数据”-对于一台计算机(8GB RAM)来说太大,无法保存在内存中。我真的不想不断地增加AWS实例的成本和麻烦,而获得更强大的硬件是很困难的(我在非盈利机构工作),所以我想优化我自己的数据读取内存成本。你知道吗

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

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

这很简单,我很困惑为什么熊猫天生就没有这种能力。我对熊猫的世界一无所知,但现在看来,在大数据集中复制字符串似乎是一种必然。数据帧中默认的字符串折叠有什么缺点吗?我是不是漏了什么?你知道吗

大熊猫的弱点是记忆成本高。字符串折叠似乎是显著减少内存开销的简单方法。为什么没有呢?你知道吗


Tags: 数据实例方法内存字符串aws数据库应用程序
1条回答
网友
1楼 · 发布于 2024-06-16 14:14:56

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

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

相关问题 更多 >