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

Seaborn countplot未读取Card列值 Y轴数值无法正常显示问题

问题根源

sns.countplot()的作用是对未聚合的原始明细数据做频次统计:传入原始数据集后,它会自动计算每个X轴类别下的观测样本数量作为Y轴值,本身不支持直接读取提前汇总好的数值列。
你手上的ordered_recurrent_df已经是按月聚合完成的结果表,Card列存的就是每个月最终的统计值。你之前的写法里,只传入了索引作为X轴,countplot会默认统计每个索引值出现的次数——因为每个月在表中只有1行记录,所以Y轴只会显示全1的结果,完全不会读取Card列的数值,转置DataFrame也没有解决「函数用途和数据类型不匹配」的核心问题,自然无效。

解决方法

优先选最简便的方案,不需要改动原始数据结构:

  • 直接换用适配聚合后数据的seaborn.barplot绘制柱状图,这是这类场景的标准用法:
import seaborn as sns
import matplotlib.pyplot as plt

# 如果Month是DataFrame的索引,先重置为普通列再传入绘图
sns.barplot(
    data=ordered_recurrent_df.reset_index(),
    x="Month",
    y="Card"
)

# 可选:旋转x轴标签避免文字重叠
plt.xticks(rotation=30)
plt.show()

注意:Seaborn默认会对分类变量按字母顺序排序,直接绘图可能打乱月份的自然先后顺序,你可以提前把Month列设为有序分类来固定顺序:

import pandas as pd
# 按自然月顺序指定类别顺序
month_order = ["January", "February", "March", "April", "May", "June"]
plot_df = ordered_recurrent_df.reset_index()
plot_df["Month"] = pd.Categorical(plot_df["Month"], categories=month_order, ordered=True)
# 再用处理好的plot_df调用barplot即可
  • 不推荐的备选方案:如果你坚持要用countplot,需要先把聚合好的数据还原成原始明细结构——也就是按照Card列的数值,把每个月份重复对应次数生成明细行,再传入countplot统计频次。这种做法会额外生成大量冗余数据(比如6月就要生成704条重复记录),运行效率低,完全没有必要。

内容的提问来源于stack exchange,提问作者Aquiles Páez

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 00:12:25