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

pandas rank浮点数排名异常 高数值排位靠后问题如何解决

问题根因

排名逻辑异常和rank()函数本身无关,是twelve_m_yield字段的数据类型错误导致的:

  • 该字段当前为字符串(object)类型,字符串排序遵循逐字符比对ASCII码的规则,第一位字符9的编码大于第一位字符1,因此所有个位数开头的收益率(6.xx、8.xx、9.xx)都会被判定为大于两位数开头的收益率(11.xx、15.xx、17.xx),最终出现排名错乱。
修复代码

在执行排名逻辑前,先将字段转换为浮点数值类型即可得到正确结果:

# 第一步:将收益率字段转换为数值类型
df['twelve_m_yield'] = df['twelve_m_yield'].astype(float)

# 原有排名逻辑保持不变
df = df[['twelve_m_yield']]
df['ranking_twelve_m_yield'] = df['twelve_m_yield'].rank(ascending=False, method='first')
df = df.sort_values(by=['ranking_twelve_m_yield'])

print(df)
补充说明
  • 可以提前执行print(df.dtypes)查看各字段类型,只要参与数值计算、排序、排名的字段显示为object类型,都需要先做类型转换。
  • 如果执行astype(float)时报错,说明字段内存在非数值脏数据(比如带百分号、千分位逗号、特殊空值占位符等),需要先做清洗再转类型,例如字段带百分号时可以先做替换处理:
    df['twelve_m_yield'] = df['twelve_m_yield'].str.replace('%', '').astype(float)
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 06:24:30