【问题标题】:PANDAS: int32 overflow? Can't bulid a pivot table熊猫:int32 溢出?无法构建数据透视表
【发布时间】:2019-11-09 10:18:59
【问题描述】:

我使用 pd.pivot_table() 方法通过旋转用户项目活动数据来创建用户项目矩阵。但是,数据框太大了,我得到了这样的抱怨:

Unstacked DataFrame 太大,导致 int32 溢出

对解决这个问题有什么建议吗?谢谢!

r_matrix = df.pivot_table(values='rating', index='userId', columns='movieId')

【问题讨论】:

  • 如果您能提供MWE,那也会很有帮助
  • 你知道int32-overflow 是什么吗?如果要处理该大小的数据,您似乎必须使用其他数据结构。
  • 不是真的。你有什么建议吗? numpy 会比 pandas 更好吗?
  • 所以:如果您将某些东西放入容器中,则会发生溢出,但是这个“东西”对于容器来说太大了。在您的情况下,pandas 内部的某些东西试图将一个数字写入变量,但该数字太大而无法放入变量中(在这种情况下是 int32。有关(整数)溢出的更多信息,只需 google a位。

标签: python pandas integer-overflow


【解决方案1】:

一些解决方案:

  • 您可以将 pandas 版本降级到 0.21,这对于包含大数据的数据透视表没有问题。
  • 您可以将数据设置为字典格式,例如df.groupby('EVENT_ID')['DIAGNOSIS'].apply(list).to_dict()

【讨论】:

    【解决方案2】:

    您可以改用groupby。试试这个代码:

    reviews.groupby(['userId','movieId'])['rating'].max().unstack()
    

    【讨论】:

    • 你为什么使用 max() ?如果我没记错的话,pivot_table() 中的默认 'aggfunc' 是 mean()。如果我错过了什么,请告诉我。
    【解决方案3】:

    库代码中的整数溢出是您无能为力的。你基本上有三个选择:

    1. 更改您提供给库的输入数据,以免发生溢出。您可能需要在某种意义上使输入更小。如果这没有帮助,您可能以错误的方式使用库或遇到库中的错误。
    2. 使用不同的库(或根本不使用);您正在使用的库似乎不适合对大量输入进行操作。
    3. 修改库的代码本身,以便它可以处理您的输入。这可能很难做到,但如果你向库源代码提交拉取请求,很多人都会从中受益。

    您提供的代码不多,所以我无法确定最适合您的解决方案。

    【讨论】:

      【解决方案4】:

      如果您希望 movieId 作为列,请首先使用 movieId 作为键对数据帧进行排序。

      然后将数据框划分(一半),使每个子集包含特定电影的所有评分。

      subset1 = df[:n] 
      subset2 = df[n:]
      

      现在,应用到每个子集

      matrix1 = subset1.pivot_table(values='rating', index='userId', columns='movieId')
      matrix2 = subset2.pivot_table(values='rating', index='userId', columns='movieId')
      

      最后使用矩阵1和矩阵2连接,

      complete_matrix = matrix1.join(matrix2)
      

      另一方面,如果您希望 userId 作为列,请使用 userId 作为键对数据框进行排序,然后重复上述过程。

      ***请务必在完成后删除子集1、子集2、矩阵1和矩阵2,否则会出现内存错误。

      【讨论】:

        【解决方案5】:

        转换值列应该可以解决您的问题:

        df['ratings'] = df['ratings'].astype('int64')

        【讨论】:

          猜你喜欢
          • 2020-03-21
          • 2021-02-28
          • 2023-01-11
          • 1970-01-01
          • 2017-01-14
          • 2019-04-28
          • 2012-04-15
          • 1970-01-01
          相关资源
          最近更新 更多