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

