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

Pandas sort_values()无法正确排序负值问题求助

问题原因分析

你遇到的问题核心在于:assign() 和 sort_values() 都是非原地操作——它们会返回一个修改后的新DataFrame,但不会直接改变原始的df对象。你的代码没有将这些返回的新对象重新赋值给df,因此原始DataFrame始终保持未修改的状态,看起来就像排序没生效。

具体来看你的代码:

  • df.assign(X=df.X.astype(float)):生成了一个X列转为float类型的新DataFrame,但你没有把这个新对象赋值给df,所以原始df的X列(在你的示例中本来就是float类型,但实际从文件读取的数据可能不同)没有被更新。
  • df.sort_values('X'):生成了按X列排序后的新DataFrame,但同样没有赋值回df,原始df依然是初始的无序状态。
解决方法

有两种方式可以修正这个问题:

1. 重新赋值给原变量

将assign()和sort_values()返回的新DataFrame重新赋值给df,覆盖原始对象:

import pandas as pd
d = {'X': [0.667, 0.667, -0.667, -0.667, 0.667, -0.667, 2, 2, -2, -2, 2, -2],
     'Y': [0.5, -0.5, 0.5, -0.5, 0, 0, 0.5, -0.5, 0.5, -0.5, 0, 0]}
df = pd.DataFrame(data=d)
# 捕获类型转换后的新DataFrame
df = df.assign(X=df.X.astype(float))
# 捕获排序后的新DataFrame
df = df.sort_values('X')
print(df)

2. 使用原地操作参数(仅适用于sort_values)

sort_values()支持inplace=True参数,直接在原始DataFrame上完成排序;但assign()没有原地操作选项,必须通过重新赋值实现:

import pandas as pd
d = {'X': [0.667, 0.667, -0.667, -0.667, 0.667, -0.667, 2, 2, -2, -2, 2, -2],
     'Y': [0.5, -0.5, 0.5, -0.5, 0, 0, 0.5, -0.5, 0.5, -0.5, 0, 0]}
df = pd.DataFrame(data=d)
# 类型转换必须重新赋值
df = df.assign(X=df.X.astype(float))
# 原地排序,无需重新赋值
df.sort_values('X', inplace=True)
print(df)

内容的提问来源于stack exchange,提问作者Réka

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 16:55:13