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
相关产品推荐
相关产品推荐

