【问题标题】:ValueError: array is too bigValueError:数组太大
【发布时间】:2017-04-04 19:22:49
【问题描述】:

我正在尝试使用以下代码合并两个excel文件并遇到ValueError: array is too big; arr.size * arr.dtype.itemsize is larger than the maximum possible size.的错误

import pandas as pd

file1 = pd.read_excel("file1.xlsx")
file2 = pd.read_excel("file2.xlsx")

file3 = file1.merge(file2, on="Input E-mail", how="outer")

file3.to_excel("merged1.xlsx")

文件大小为~100MB+~100MB,可用内存为 9GB(16GB)

【问题讨论】:

  • 您使用的是 64 位 Python 吗?
  • 当前使用 32 位
  • 然后切换到 64 位。
  • 您是否尝试过除 pandas 之外的其他软件包来执行此操作?

标签: python


【解决方案1】:

您生成的数据框可能比您的两个输入数据框大得多。简单例子:

import pandas as pd

values = pd.DataFrame({"id": [1,1,1,1], "value": ["a", "b", "c", "d"]})

users = pd.DataFrame({"id": [1,1,1], "users": ["Amy", "Bob", "Dan"]})

big_table = pd.merge(users, values, how="outer")

print big_table

结果:

     id  users    value
0     1   Amy       a
1     1   Amy       b
2     1   Amy       c
3     1   Amy       d
4     1   Bob       a
5     1   Bob       b
6     1   Bob       c
7     1   Bob       d
8     1   Dan       a
9     1   Dan       b
10    1   Dan       c
11    1   Dan       d

【讨论】:

  • 感谢您的回复。这是有意的,我正在寻找您所描述的结果,但由于文件大小为 100MB,因此出现“数组太大”的错误。你能帮我解决这个问题吗?
  • @user3783174 如果您需要整个合并的数据帧,解决此问题的唯一方法是让机器具有更多 RAM。然而,你需要这一切吗?也许您可以在合并之前过滤您最感兴趣的行?
  • 不幸的是,是的。我需要所有的数据。你能推荐我所需的内存吗?
  • 我不知道。这实际上取决于您的输入文件的结构。即使我是新的,也很难弄清楚。
  • 我刚刚在 64 位中尝试了相同的操作,但出现“MemoryError”错误。你能建议一种替代方法来解决这个问题吗?
猜你喜欢
  • 2020-02-10
  • 2015-12-05
  • 1970-01-01
  • 2021-10-22
  • 1970-01-01
  • 2022-07-06
  • 1970-01-01
  • 2020-05-03
  • 2017-01-07
相关资源
最近更新 更多