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

如何按长度和字母数字顺序对Pandas DataFrame字符串列排序

解决方案

要实现先按字符串长度、再按字母数字自然顺序的排序,你可以结合字符串长度和自然排序规则自定义排序键,具体步骤如下:

1. 准备工作

首先确保目标列是字符串类型(原始数据混合了数字和字母数字组合),并安装natsort库处理自然排序(它能正确区分数字的数值大小和字母的字典序):

pip install natsort

2. 具体代码

import pandas as pd
from natsort import nats_keygen

# 构造示例DataFrame
input_data = [10, 100110, 222754430, 777000, "TEST10", 800022110, 210, 1960, 30, "TERM20", 22100, 22300, 487854750, "TEST20", 2200010, 220, 20, 22200, 1100, 2200020]
df = pd.DataFrame({"col": input_data})

# 转换为字符串类型
df["col"] = df["col"].astype(str)

# 自定义排序:先按字符串长度升序,再按自然排序规则
df_sorted = df.sort_values(by="col", key=lambda x: x.apply(lambda y: (len(y), nats_keygen()(y))))

# 查看结果
print(df_sorted["col"].tolist())

3. 结果说明

运行后会得到你预期的输出:

['10', '20', '30', '210', '220', '1100', '1960', '22100', '22200', '22300', 'TERM20', 'TEST10', 'TEST20', '100110', '777000', '2200010', '2200020', '222754430', '487854750', '800022110']

为什么之前的方法无效?

  • 单纯按长度排序:只考虑了字符串长度,同长度内容会按默认字典序排列,无法处理字母数字组合的自然排序需求。
  • 直接用sort_values:默认是字典序排序,会忽略长度优先级,出现"100110"(长度6)排在"210"(长度3)前面的错误结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 18:42:43