python - 处理大型数据集时发生内存错误
问题描述
我有 3 个 numpy 数组的插值数据。
Each of Length - 107952899
面临的问题
当我将这三个 numpy 数组组合为 pandas df 时,我得到MemoryError
.
转换为 df 的原因
我必须做一些计算,熊猫让它更容易,所以我更喜欢用熊猫做。我相信三个 numpy 数组的内存大小超过 3 Gb 甚至更多。
系统详情:
8Gb RAM python 3.6.3
要求
我理解这种错误的原因但是有没有可能避免 MemoryError 或其他一些要遵循的最佳实践?
解决方案
当我将这三个 numpy 数组组合为 pandas df 时,我得到了 MemoryError。
假设您这样做:
import numpy as np
import pandas as pd
big_array_1 = np.array(np.random.random(10**7))
big_array_2 = np.array(np.random.random(10**7))
big_array_3 = np.array(np.random.random(10**7))
在我的电脑上,它需要大约 300 MB 的内存。
然后,如果我这样做:
df = pd.DataFrame([big_array_1,big_array_2, big_array_3])
内存飙升至 9Gb 的 RAM。如果将它乘以 10 倍(以获得 3 Gb 数据而不是我的 300),您将达到 90 Gb,这可能比您的 Ram + 可用交换还多,这将提高MemoryError
.
但如果相反,你这样做:
df = pd.DataFrame({"A":big_array_1, "B": big_array_2, "C":big_array_3})
那么您的内存使用量不会比您的三个数组之一大得多。
我怀疑是你的问题...
推荐阅读
- python - MacOS Mojave中安装ucl时出错
- powershell - 使用 Stop-Parsing 从 PowerShell ps1 脚本运行 cmd /c
- javascript - 如何匹配所有内部星号,它们之间没有空格
- charts - ios-charts如何调整饼图高度
- python - 有什么建议可以拆分一长串数据并将其放入新列中?
- amazon-web-services - 如何在不删除现有内容的情况下向 AWS Lambda 添加环境变量?
- javascript - material-ui 点击一个时关闭所有其他卡片内容
- c# - Asp.Net Mvc Identity&Owin 真正的双重身份验证方式
- swift - 如何将 NSDateComponent 作为函数参数传递
- typescript - 你如何在类型 T 和 U 上声明一个函数泛型,它不允许 T 和 U 的空交集