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

Python中无法在柱状图中对数值进行升序排序问题排查

Pandas排序后柱状图数值未按预期排列的问题

我用Python的pandas和matplotlib做数据可视化时,碰到了柱状图里的数值没法按预期排序的问题。我的代码如下:

import pandas as pd
import matplotlib.pyplot as plt

# 创建数据集
data = pd.read_csv('agemode.csv')
data.columns = data.iloc[9]
data_new = data.drop([0,1,2,3,4,5,6,7,8,9,10,11,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33], 
    axis=0).dropna(axis='columns').sort_values(by=['Below 30 Years'], ascending=False)
data_new

从截图可以看到,“Below 30 Years”列的排序结果明显不符合预期。


解决方法

1. 检查目标列的数据类型

大概率是“Below 30 Years”列的数据是字符串格式而非数值类型。字符串排序是按字典序执行的,和数值大小排序逻辑完全不同。

先查看列类型:

print(data_new['Below 30 Years'].dtype)

如果输出是object,就把它转换成数值类型,同时处理可能存在的特殊字符(比如百分号、逗号):

# 替换非数值字符后转成数值格式
data_new['Below 30 Years'] = pd.to_numeric(
    data_new['Below 30 Years'].str.replace('%', '').str.replace(',', ''),
    errors='coerce'
)

2. 确认排序后的数据是否正确

转换类型后重新执行排序,打印列值验证结果:

print(data_new['Below 30 Years'].sort_values(ascending=False))

3. 可视化时使用排序后的数据集

有时候数据已经排对,但画图时没有调用排序后的结果。绘制柱状图时直接使用data_new的对应列即可:

plt.bar(data_new.index, data_new['Below 30 Years'])
plt.xlabel('类别')
plt.ylabel('数值')
plt.title('Below 30 Years 分布')
plt.show()

4. 检查数据清理步骤

你删除了大量行,确认这些行的删除操作没有导致数据不完整,或是误删了关键数据导致剩余数据本身存在异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 04:15:25