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

Python pandas创建透视表遇Long_scalars溢出警告求助

解决Pandas透视表溢出警告问题

问题根源

你碰到的RuntimeWarning: overflow encountered in long_scalars,是因为track_name的唯一值太多,和track_id的唯一值相乘后,计算透视表总单元格数时超出了整数范围。而且这种情况下生成的透视表会异常庞大,既占内存又没实际分析价值。

具体解决办法

1. 先查数据的唯一值数量

先确认track_id和track_name各自的唯一值数量,排查是否存在一对多或数据重复情况:

print("唯一track_id数量:", dataset['track_id'].nunique())
print("唯一track_name数量:", dataset['track_name'].nunique())

如果track_name的唯一值远多于track_id,说明可能存在同名不同曲或数据重复的问题,需要先做数据清洗。

2. 调整透视表逻辑

如果你的需求是按track_id分组,同时关联对应的track_name和popularity,没必要把每个track_name都设为列,换这两种方式更合理:

  • 将track_name加入行索引
user_song = pd.pivot_table(dataset, index=['track_id', 'track_name'], values=['popularity'], aggfunc='mean')

这里的aggfunc可以根据需求换成sum、max等,默认是取平均值。

  • 用分组聚合替代透视表,更直观
user_song = dataset.groupby(['track_id', 'track_name'])['popularity'].agg('mean').reset_index()

3. 确实需要按track_name做列(仅当唯一值较少时用)

如果track_name的唯一值本来就不多,出现警告可能是数据类型问题,先把字段转成字符串类型再尝试:

dataset['track_id'] = dataset['track_id'].astype(str)
dataset['track_name'] = dataset['track_name'].astype(str)
user_song = pd.pivot_table(dataset, index=['track_id'], values=['popularity'], columns=['track_name'], aggfunc='mean')

补充说明

你移除columns参数后代码能运行,是因为此时透视表仅按track_id分组,不会生成大量列,避免了单元格数量溢出的问题。但要关联track_name的话,优先考虑将其加入行索引或用分组聚合,别硬转成列,否则会生成超大无用的表,浪费资源。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 12:50:22