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
相关产品推荐
相关产品推荐

