Python 什么';Series.sort()和Series.order()之间的区别是什么?

Python 什么';Series.sort()和Series.order()之间的区别是什么?,python,pandas,Python,Pandas,输出 s = pd.Series( nr.randint( 0, 10, 5 ), index=nr.randint(0, 10, 5 ) ) s s.order() s.sort() s order()按值排序并返回新序列 1 3 7 6 2 0 9 7 1 6 输出 s = pd.Series( nr.randint( 0, 10, 5 ), index=nr.randint(0, 10, 5 ) ) s s.order() s.sort() s

输出

s = pd.Series( nr.randint( 0, 10, 5 ), index=nr.randint(0, 10, 5 ) )
s
s.order()
s.sort()
s
order()
按值排序并返回新序列

1    3
7    6
2    0
9    7
1    6
输出

s = pd.Series( nr.randint( 0, 10, 5 ), index=nr.randint(0, 10, 5 ) )
s
s.order()
s.sort()
s
它看起来像是
sort
也按值排序,但在适当的位置:

2    0
1    3
7    6
1    6
9    7
输出

s = pd.Series( nr.randint( 0, 10, 5 ), index=nr.randint(0, 10, 5 ) )
s
s.order()
s.sort()
s

这是这两种方法之间的唯一区别吗?

查看pandas源代码(并跳过docstring)

将其与声明订单行进行比较(我使用的是0.14.1)

您可以看到,由于sort调用了order函数,因此这两个函数除了默认参数之外,在所有方面都是相同的

如问题中所述,sort
inplace=True
和order
inplace=False
inplace
参数的默认值不同,但在行为上没有其他差异

另一个唯一的区别是order有一个附加的(但已弃用的)参数,形式为
na_last
,不能与sort一起使用(而且无论如何也不应该使用)。

您的问题是:(
Series.sort
就地v.s.
Series.order
返回新obj)这两种方法的唯一区别是什么

熊猫0.17.0最终发布之前(即2015-10-09之前) 简短回答:是的。它们在功能上是等价的

详细回答:

:更改对象本身(就地排序),但不返回任何内容

按值对值和索引标签进行排序。默认情况下,这是一种就地排序
系列。订单
是等效的,但返回一个新系列。

所以

什么也不输出。有关更多详细信息,请参阅

:不更改对象,而是返回新的排序对象

按值对序列对象排序,维护索引值链接。默认情况下,这将返回一个新系列
系列。排序
是等效的,但作为一种就地方法。


熊猫0.17.0最终发布后(即2015-10-09之后) 排序的API是,事情变得更干净、更愉快

要按值进行排序
Series.sort()
Series.order()
都已弃用,替换为返回排序序列对象的新api

总结这些变化(摘自pandas 0.17.0):


你看过文件了吗?和。它看起来像是为了与numpy兼容而存在的
sort()
。我确实读过它们。对于
order()
,可以清楚地看到,它按值排序并维护索引值链接。但是对于
sort()
,它只是说“按值对值和索引标签进行就地排序”。我认为这很混乱。0.14/master版本的文档更好(很快就会出现)。在
Series.order(inplace=True)==Series.sort()
中,我已经搜索了几个小时的解决方案。答案是“inplace=True”。非常感谢。