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

Pandas Series排序结果不符合预期,请求解析排序依据

Pandas Series字符串排序的规则说明

你遇到的问题核心是:你的Series里的元素全是字符串类型(每个元素都用引号包裹),Pandas对字符串类型数据排序时,默认用的是字典序(逐字符按ASCII码比较),不是你预期的数值大小排序。

具体排序逻辑拆解

你的Series元素是:'1', '3', 'python', '10', '5'
按字典序排序的过程:

  • 先比第一个字符的ASCII码:数字字符'0'-'9'的ASCII码是48到57,字母'p'是112,所以所有数字字符串都排在'python'前面
  • 数字字符串之间再逐字符比:
    • '1'和'10'第一个字符都是'1',但'1'只有一个字符,短字符串在相同前缀下优先级更低,所以'1'排在'10'之前
    • 接着是'3'(ASCII码51)、'5'(ASCII码53),按ASCII码顺序排列

所以实际运行sort_values后的结果是:

0       1
3      10
1       3
4       5
2    python
dtype: object

怎么得到你想要的排序结果

如果想先按数值大小排数字,再放'python',可以这么写代码:

import pandas as pd

s1 = pd.Series(['1','3','python','10','5'])

# 拆分数字和非数字部分
nums = s1[s1.str.isdigit()].astype(int).sort_values().astype(str)
non_nums = s1[~s1.str.isdigit()]

# 合并两部分
sorted_series = pd.concat([nums, non_nums])
print(sorted_series)

运行后就能得到你预期的['1','3','5','10','python']。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 06:20:45