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

DataFrame使用sort_values按列1排序结果异常,列2、4排序正常问题

问题:DataFrame按列1排序结果异常,其他列正常

我有一个DataFrame,按列2、列4排序时结果符合预期,但按列1排序却得到错误结果。相关代码及输出如下:

pd.DataFrame(np.hstack([np.array(labels).reshape([-1,1]),picked_box_probs[:,:4]]))
Out[59]: 
   0           1           2           3          4
0  皖   5.7159505   11.721471    31.53594  59.627377
1  2    174.8078  10.9442625   201.33795  62.615562
2  6    147.1714  10.0783825    173.1844   61.20856
3  8    93.03298   11.160529  117.985115  60.283916
4  A   33.483356  11.9336815   58.625034  59.587143
5  N   65.282814   11.349585    90.84942   59.98239
6  X  120.351524   11.449275   145.36586  61.187523

pd.DataFrame(np.hstack([np.array(labels).reshape([-1,1]),picked_box_probs[:,:4]])).sort_values(1)
Out[60]: 
   0           1           2           3          4
6  X  120.351524   11.449275   145.36586  61.187523
2  6    147.1714  10.0783825    173.1844   61.20856
1  2    174.8078  10.9442625   201.33795  62.615562
4  A   33.483356  11.9336815   58.625034  59.587143
0  皖   5.7159505   11.721471    31.53594  59.627377
5  N   65.282814   11.349585    90.84942   59.98239
3  8    93.03298   11.160529  117.985115  60.283916

原因分析

核心问题是数据类型不匹配:
用np.hstack拼接字符串数组(labels)和数值数组(picked_box_probs)后,NumPy会把整个数组统一转为字符串类型。列1的数值看起来是数字,实际存储的是字符串,而字符串排序是按字符ASCII码顺序进行的——比如"120..."会排在"33..."前面,因为字符'1'的ASCII码比'3'小,这就导致了数值排序的错误结果。

解决方法

方法1:创建DataFrame时直接指定列类型

df = pd.DataFrame(
    np.hstack([np.array(labels).reshape([-1,1]), picked_box_probs[:,:4]]),
    dtype={0: str, 1: float, 2: float, 3: float, 4: float}
)
df.sort_values(1)  # 此时按数值排序,结果正常

方法2:创建后转换列类型

df = pd.DataFrame(np.hstack([np.array(labels).reshape([-1,1]), picked_box_probs[:,:4]]))
# 将列1到列4转为浮点型
df[[1,2,3,4]] = df[[1,2,3,4]].astype(float)
df.sort_values(1)

方法3:分开传入数据,避免类型统一

不用np.hstack,直接按列传入不同类型的数据:

df = pd.DataFrame({
    0: labels,
    1: picked_box_probs[:, 0],
    2: picked_box_probs[:, 1],
    3: picked_box_probs[:, 2],
    4: picked_box_probs[:, 3]
})
df.sort_values(1)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 17:34:55