【问题标题】:Unstacked DataFrame is too big, causing int32 overflowUnstacked DataFrame太大,导致int32溢出
【发布时间】:2021-06-02 06:21:00
【问题描述】:

1.读取 CSV 文件评级

ratings = pd.read_csv('mls/ratings.csv', encoding='latin-1')
ratings.head(3)

2。信息

user = ratings .userId.nunique()
fimId = ratings .movieId.nunique()
count_rating = len(ratings)
user, fimId, count_rating

(138493, 26744, 20000263)

3.我想创建一个评分矩阵

ratings_matrix = ratings.pivot_table(index=['movieId'],columns['userId'],values='rating').reset_index(drop=True)
ratings_matrix.fillna( 0, inplace = True )
ratings_matrix.head(5)

我是否犯了错误/不一致? 并发生错误

ValueError: Unstacked DataFrame is too big, causing int32 overflow

有一个论坛建议“缩小 .pivot() 函数的输入大小”。但我还不知道收缩的步骤。

我真的很感激所有的答案,即使只有你知道的步骤

【问题讨论】:

  • 如果没有看到实际数据很难说,但是 pandas 有一个关于数据扩展的非常有用的部分:pandas.pydata.org/pandas-docs/stable/user_guide/scale.html。我会尝试 1)用较小的数据验证您的数据透视 2)丢弃不需要的数据并使用高效的数据类型,3)在必要时使用 dask(它们包含相同的 pivot_table 函数,但在磁盘上而不是在内存中运行)跨度>
  • 请向我们展示您的数据,以帮助我们检查int32 overflow 发生的原因
  • @anon01 问题信息已更新,提前感谢您的关注
  • @Sagar 我已经更新了问题信息,提前感谢您的关注
  • 请不要图片。以 df.to_dict() 为例。

标签: python jupyter-notebook anaconda


【解决方案1】:

看起来您的未堆叠数据大于比 Pandas 可以处理的 int32 范围。这是一个库限制,可以通过智能地将数据划分为可处理的组

来处理

您可以通过 Pandas 的 groupby() 函数轻松完成此操作


这是我的建议:

  • 根据userIdmovieId 对您的数据进行分组
  • 根据需要使用get_group() 访问特定组
  • 您甚至可以使用groups 参数查看由groupby() 操作创建的所有组
  • 如果需要,您可以将特定组存储为单独的较小的DataFrame

这是如何完成的(我已将movieId 作为相关数据的分组参数):

>>> rating_groups = ratings.groupby('movieId')
>>> rating_groups.groups    # Returns a PrettyDict with the Group Identifiers as Keys and List of DataFrame Indices as its Value
{2: [0], 29: [1], 32: [2]}

您现在可以使用 rating_groups.get_group(<Group Identifier>) 将所需的组作为 DataFrame 获取,其中包含组标识符中提到的相同 movieId 的所有行

>>> rating_groups.get_group(2)
   userId  movieId  rating   timestamp
0       1        2     3.5  1112486027

如果您的个人组数据仍然很大,您可以通过将参数提供给groupby() 作为列标识符的list 来执行多重分组。组标识符现在将是低阶标识符的tuple

在这里,我以movieIduserId 为键执行了多重分组:

>>> multi_group = ratings.groupby(['movieId', 'userId'])
>>> multi_group.groups
{(2, 1): [0], (29, 1): [1], (32, 1): [2]}

您现在可以对这些组数据帧执行pivot_table()

【讨论】:

    猜你喜欢
    • 2020-08-28
    • 2020-07-12
    • 2022-06-28
    • 1970-01-01
    • 1970-01-01
    • 2015-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多