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

Seaborn报错‘Input data must be a pandas object to reorder’问题求助

问题排查与解决

错误原因

Seaborn 0.12版本对countplot()的API调用逻辑做了调整:

  • 不能直接将pandas Series作为第一个位置参数传入,必须显式指定x(或y)参数绑定数据。直接传Series会导致Seaborn无法正确识别数据结构,进而触发"Input data must be a pandas object to reorder"错误。
  • 代码中plt.setp(axs[i])属于无效调用,plt.setp需要明确指定要设置的属性(比如刻度标签样式),这行代码无实际作用,甚至可能引发额外问题。

修复后的完整代码

import matplotlib.pyplot as plt 
import seaborn as sns
import pandas as pd

sns.set(style='white')
df = pd.read_csv("https://storage.googleapis.com/dqlab-dataset/customer_segments.txt", sep="\t")
plt.clf()
  
# 准备分类列  
kolom_kategorikal = ['Jenis Kelamin','Profesi','Tipe Residen']  

# 创建画布
fig, axs = plt.subplots(3,1,figsize=(7,10)) 

# 为每个分类列创建图表  
for i, kol in enumerate(kolom_kategorikal):  
    # 修改countplot调用,显式指定x参数
    sns.countplot(x=df[kol], order=df[kol].value_counts().index, ax=axs[i])  
    axs[i].set_title(f'\nCount Plot {kol}\n', fontsize=15)
      
    # 添加注释  
    for p in axs[i].patches:  
        axs[i].annotate(format(p.get_height(), '.0f'),  
                        (p.get_x() + p.get_width() / 2., p.get_height()),  
                        ha='center',  
                        va='center',  
                        xytext=(0, 10),  
                        textcoords='offset points') 
          
    # 设置图表  
    sns.despine(right=True, top=True, left=True)  
    axs[i].axes.yaxis.set_visible(False) 
    # 若需调整刻度样式可按需添加,比如旋转x轴标签:
    # plt.setp(axs[i].get_xticklabels(), rotation=45)
    plt.tight_layout()

# 显示图表
plt.show() 

关键修改点

  • 将sn.countplot(df[kol], ...)改为sn.countplot(x=df[kol], ...),显式指定数据对应的坐标轴。
  • 删除无效的plt.setp(axs[i])调用,若需要调整刻度标签等样式,可补充具体参数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 23:47:36