使用pandas sort_values排序出现异常问题求助
问题分析与解决
核心问题大概率是h_price列的数据类型为字符串(object),而非数值类型(int/float)。
原因说明
当h_price是字符串时,max()和sort_values()会按字符串的字典序逻辑处理,而非数值大小:
- 比如字符串"200"会被判定为大于"1000",因为第一个字符"2"的ASCII码比"1"高,这直接导致你看到的排序、最大值结果不符合预期。
排查与解决步骤
- 检查数据类型与内容
先确认h_price的类型,同时查看是否包含非数值字符(如逗号、"元"等单位):
print(bond['h_price'].dtype) print(bond['h_price'].head())
- 转换为数值类型
- 如果h_price带非数值字符(如"1,500元"),先清理再转换:
bond['h_price'] = bond['h_price'].str.replace(',', '').str.replace('元', '').astype(float)
- 如果只是纯字符串格式的数值,直接转换:
bond['h_price'] = bond['h_price'].astype(float)
- 重新执行目标操作
转换完成后,再运行你的分组取最大值和排序代码,结果就会符合数值逻辑:
# 分组获取h_price最大值 df.groupby('h_type')['h_price'].max() # 按h_price降序排序 a = bond.loc['mansion'] aMax = a.sort_values(['h_price'], ascending=False)
内容的提问来源于stack exchange,提问作者april
相关产品推荐
相关产品推荐

