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

Pandas DataFrame双列排序失效问题求助

DataFrame排序不生效的解决办法

问题出在哪

从数据情况来看,x列大概率是字符串类型而非数值类型。字符串排序是按单个字符的顺序比较的,比如"10"会排在"2"前面,这和你预期的数值升序逻辑完全不符,所以才会出现排序结果不符合预期的情况。

怎么修复

  1. 先确认数据类型
    运行以下代码查看各列的数据类型:

    print(df_reference.dtypes)
    

    如果x列显示为object,就说明它是字符串类型,需要转换为数值类型。

  2. 将x列转为数值类型
    使用这行代码完成类型转换:

    df_reference['x'] = pd.to_numeric(df_reference['x'], errors='coerce')
    

    参数errors='coerce'会把无法转换为数值的内容转为NaN,后续你可以根据实际情况处理这些异常值。

  3. 重新执行排序
    转换类型后再执行排序操作:

    df_reference.sort_values(by=['x','y'], inplace=True, ascending=[True, False])
    print(df_reference)
    

更省事的优化:读取文件时直接指定类型

你也可以在读取文件阶段就指定列的数据类型,省去后续转换的步骤:

df_reference = pd.read_csv(
  "reference.txt",
  delim_whitespace=True,
  names=["x", "y"],
  index_col=False,
  dtype={'x': int, 'y': int}  # 如果是小数就改成float
)
df_reference.sort_values(by=['x','y'], inplace=True, ascending=[True, False])
print(df_reference)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 12:20:50