如何对1.1与1.1.2这类分层数字格式数据进行排序?
分层数字(如1.1、1.1.2)的排序解决技巧
在数据分析中遇到这类带多级小数点的分层数字,常规排序会把它们当字符串按字符顺序排,导致1.10排在1.2前面,下面是几种实用的解决方法:
Python 处理方案
方法1:用第三方库快速实现
natsort是专门处理自然排序的库,能完美识别分层数字结构:
- 先安装:
pip install natsort - 示例代码:
from natsort import natsorted raw_data = ["1.1", "1.10", "1.1.2", "1.2", "2"] sorted_data = natsorted(raw_data) print(sorted_data) # 输出结果:['1.1', '1.1.2', '1.2', '1.10', '2']
方法2:原生代码实现(无需额外库)
把每个分层数字按.拆分成整数列表,用这个列表作为排序的依据:
raw_data = ["1.1", "1.10", "1.1.2", "1.2", "2"] sorted_data = sorted(raw_data, key=lambda x: list(map(int, x.split(".")))) print(sorted_data) # 输出和上面一致
Excel 处理方案
辅助列拆分排序(通用所有版本)
- 插入新列(比如B列),在B1单元格输入公式:
=TEXTSPLIT(A1, ".")(旧版Excel用=FILTERXML("<t><s>"&SUBSTITUTE(A1,".","</s><s>")&"</s></t>","//s")),按回车后会自动把A列的分层数字拆分成多个单元格 - 选中原始数据列(A列)和辅助列(B列及后续拆分出的列),点击「数据」→「排序」
- 在排序对话框中,依次添加排序条件:先按拆分后的第一列排序,再按第二列,以此类推,完成后就能得到正确的排序结果
自定义序列排序(适合固定范围数据)
如果你的分层数字范围固定,可直接创建自定义序列:
- 点击「文件」→「选项」→「高级」→「编辑自定义列表」
- 输入所有分层数字的正确顺序,添加后回到排序界面,选择「自定义序列」作为排序依据即可
SQL 处理方案(以MySQL为例)
通过SUBSTRING_INDEX拆分字符串,转换为整数后按层级排序:
SELECT version_column FROM your_table ORDER BY CAST(SUBSTRING_INDEX(version_column, '.', 1) AS UNSIGNED), CAST(SUBSTRING_INDEX(SUBSTRING_INDEX(version_column, '.', 2), '.', -1) AS UNSIGNED), CAST(SUBSTRING_INDEX(version_column, '.', -1) AS UNSIGNED);
这段代码会依次按第一级、第二级、第三级数字排序,即使部分数据只有两级,也能正常处理。
内容的提问来源于stack exchange,提问作者Abhishek Patil
相关产品推荐
相关产品推荐

