python – 从pandas数据帧中选择时的内存优化
发布时间:2020-12-20 13:43:59 所属栏目:Python 来源:网络整理
导读:我有一个相当大的pandas数据帧(1.7G),我从中选择一些列进行一些计算(找到三个选定列的最大值).看来这个操作是内存密集型的.我试图找到一种方法来避免这种内存开销. 出于这个问题的目的,我简化了数据框并使用了假数据.我的代码和内存占用量如下所示, from mem
我有一个相当大的pandas数据帧(1.7G),我从中选择一些列进行一些计算(找到三个选定列的最大值).看来这个操作是内存密集型的.我试图找到一种方法来避免这种内存开销.
出于这个问题的目的,我简化了数据框并使用了假数据.我的代码和内存占用量如下所示, from memory_profiler import profile import pandas as pnd import random @profile def main(): cols = [chr(i) for i in range(65,91)] d = {} n = 1000000 for c in cols: d[c] = [random.randint(0,100) for i in range(n)] df = pnd.DataFrame(d) items = ['A','F','G'] a = df[items] b = a.max(axis=0) if __name__ == "__main__": main() Line # Mem usage Increment Line Contents ================================================ 6 42.3 MiB 0.0 MiB @profile 7 def main(): 8 42.3 MiB 0.0 MiB cols = [chr(i) for i in range(65,91)] 9 42.3 MiB 0.0 MiB d = {} 10 42.3 MiB 0.0 MiB n = 1000000 11 240.6 MiB 198.3 MiB for c in cols: 12 240.6 MiB 0.0 MiB d[c] = [random.randint(0,100) for i in range(n)] 13 446.7 MiB 206.1 MiB df = pnd.DataFrame(d) 14 446.7 MiB 0.0 MiB items = ['A','G'] 15 469.7 MiB 23.1 MiB a = df[items] 16 469.8 MiB 0.1 MiB b = a.max(axis=0) 在上面的操作中,似乎df [items]占用了23MB的内存.我推测这是因为它正在复制df并将其放在’a’中. 有没有办法在选择列时摆脱这种内存开销? 解决方法
Pandas为大多数操作返回副本.某些选择操作可以返回视图,因为内存可能不会被复制并且是底层的numpy视图.这通常由numpy控制.像你正在做的采取操作(例如非连续的)切片将永远不会给出视图.
但是,更重要的是,这实际上并不重要,只要对变量的引用被释放,内存就会被垃圾收集. 你的目标是什么? (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- flask开中发遇到jinja2.exceptions.TemplateSyntaxError: u
- python – 读取文本文件时的UnicodeDecodeError
- wpf – 为什么我的UI在使用System.Threading.Task类时会被阻
- django – AWS – 执行git aws.push时“无法获取存储桶名称
- python – 将类实例强制转换为子类
- worker_machine_type标记在使用python的Google Cloud Dataf
- python – AssertionError:col应该是Column
- JWT认证
- 如何在python中计算NTLM哈希?
- 特定于应用程序的PYTHONPATH