You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Pandas生成透视表时遇ValueError: negative dimensions are not allowed错误求助

解决pivot_table报错「negative dimensions are not allowed」的方案

1. 先排查合并后的重复数据

这个报错大概率是因为合并后的df_merge1里存在同一个用户(User-ID)对应同一本书(ISBN)的多条评分记录,导致透视表在计算维度时出现异常。

先执行代码检查重复项:

# 检查(User-ID, ISBN)的重复组合
dup_count = df_merge1.duplicated(subset=['User-ID', 'ISBN'], keep=False).sum()
print(f"重复的用户-书籍组合数:{dup_count}")

# 若有重复,查看示例
if dup_count > 0:
    print(df_merge1[df_merge1.duplicated(subset=['User-ID', 'ISBN'], keep=False)].head())

处理重复项的两种方式:

  • 重复评分一致:直接去重
    df_merge1 = df_merge1.drop_duplicates(subset=['User-ID', 'ISBN'], keep='first')
    
  • 重复评分不同:按规则聚合(比如取均值)
    df_merge1 = df_merge1.groupby(['User-ID', 'ISBN'])['Book-Rating'].mean().reset_index()
    

2. 检查数据集规模是否过大

如果唯一用户数或唯一ISBN数特别多,透视表会生成超大型稀疏矩阵,可能触发内存或维度计算异常。先看基础统计:

print(f"唯一用户数:{df_merge1['User-ID'].nunique()}")
print(f"唯一ISBN数:{df_merge1['ISBN'].nunique()}")

如果数据量过大,要么缩小数据集测试,要么改用稀疏矩阵存储:

from scipy.sparse import csr_matrix

# 转换为稀疏矩阵替代普通透视表
sparse_bookmat = csr_matrix(pd.pivot_table(df_merge1, index='User-ID', columns='ISBN', values='Book-Rating').fillna(0))

3. 验证合并逻辑是否正确

检查合并操作是否引入了冗余数据:

  • 确认pd.merge的how参数(inner/left/right等)是否符合预期,避免意外引入大量无效数据
  • 对比合并前后的行数,判断是否出现异常膨胀:
    # 替换成你的原DataFrame名称
    print(f"原用户数据行数:{df_users.shape[0]}")
    print(f"原书籍评分数据行数:{df_books.shape[0]}")
    print(f"合并后数据行数:{df_merge1.shape[0]}")
    

处理完以上步骤后,重新运行透视表代码即可解决问题。

内容的提问来源于stack exchange,提问作者Matthew

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 14:17:48