使用hvplot绘制分组柱状图时遇TypeError问题求助
使用hvPlot绘制分组柱状图报错的解决方法
问题背景
需要绘制分组柱状图:每个SKU对应一组柱状条,分别展示1_Star到5_Star的计数,原代码:
ratings_df_sum.hvplot.bar(stacked=False, height=500, rot=60)
数据格式(宽格式DataFrame):
Online_THD_SKU 1_Star 2_Star 3_Star 4_Star 5_Star 0 1000017290-SG APC 640OZ 3 0 1 1 6 1 1001700777-1 GAL. CONCENTRATED ALL-PURPOSE CLEA 5 4 3 45 289 2 1002075704-SMPL GRN OUTDR ODOR ELIMINATOR 32OZ 19 20 24 62 206 3 1002075713-SMPL GRN OUTDR ODOR ELIMINATOR 128OZ 33 17 28 93 305 4 1002332519-5 GAL. EXTREME AIRCRAFT AND PRECISIO 2 1 0 4 30 5 431429-SG APC 128OZ 26 14 33 182 1242 6 435909-SG APC CONCEN SPY 32OZ 12 0 5 6 88 7 853534-SG PRO HEAVY DUTY 128OZ 24 6 11 29 187 8 854029-SG PRO3PLUS ANTIBAC&DISINFECT 128OZ 8 3 6 21 166 9 883387-SIMPLE GREEN APC 320OZ 15 1 12 33 271
运行代码后报错:
TypeError: can only concatenate list (not "int") to list
问题原因
hvPlot绘制分组柱状图时,默认要求数据为长格式(Long Format),但当前数据是宽格式(各星级作为独立列),导致hvPlot无法正确解析分组逻辑,触发类型错误。
解决方法
1. 将宽格式数据转换为长格式
使用Pandas的melt方法重构数据结构:
import pandas as pd # 转换为长格式 ratings_long = ratings_df_sum.melt( id_vars='Online_THD_SKU', # 保留SKU作为分组标识 var_name='Star_Rating', # 新列:星级类型(1_Star/2_Star等) value_name='Count' # 新列:对应星级的计数 )
2. 基于长格式数据绘制分组柱状图
指定x、y和by参数明确分组逻辑:
import hvplot.pandas # 绘制分组柱状图 ratings_long.hvplot.bar( x='Online_THD_SKU', y='Count', by='Star_Rating', # 按星级分组 stacked=False, height=500, rot=60, title='各SKU星级评分计数', legend='right' # 可选:调整图例位置 )
补充说明
- 如果需要自定义柱状条颜色,可以添加
color='Star_Rating'参数,让不同星级对应不同颜色 - 若要调整x轴标签显示,可增加
xlabel='SKU名称'等参数优化可视化效果
内容的提问来源于stack exchange,提问作者mexicanRmy
相关产品推荐
相关产品推荐

