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

Python中如何对仅含字符串的Numpy二维数组按第二列排序?

按Numpy字符串数组的第二列数值排序的解决方法

你遇到的问题根源在于第二列是字符串类型,numpy对字符串数组执行argsort()时会按字典序排序,而非数值序。比如字符串'10'的首字符'1'比'2'小,所以会排在'2'前面,导致排序结果不符合预期。

解决思路是先将第二列的字符串转换为数值类型,再基于数值排序:

import numpy as np

# 原数组
x = np.array([ ['0', '0'],
             ['1', '1'],
             ['7', '10'],
             ['8', '11'],
             [',', '2'],
             ['4', '3'],
             ['.', '4'],
             ['2', '5'],
             ['5', '6'],
             ['er014', '7'],
             ['ww', '8'],
             ['*', '9']])

# 1. 将第二列字符串转为整数类型
numeric_col2 = x[:, 1].astype(int)
# 2. 获取按数值排序的索引
sorted_idx = numeric_col2.argsort()
# 3. 用索引对原数组排序
A = x[sorted_idx]

# 输出排序结果
print(A)

执行后会得到符合数值排序预期的结果:

[['0' '0']
 ['1' '1']
 [',' '2']
 ['4' '3']
 ['.' '4']
 ['2' '5']
 ['5' '6']
 ['er014' '7']
 ['ww' '8']
 ['*' '9']
 ['7' '10']
 ['8' '11']]

如果第二列存在无法转换为数值的字符串,可以先过滤或处理异常,但你的案例中第二列均为可转换的数字字符串,所以上述方法完全适用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 07:01:55