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

时间:2014-05-16 13:47:43

标签: python pandas

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

输出

1    3
7    6
2    0
9    7
1    6

order()按值排序并返回新的系列

s.order()

输出

2    0
1    3
7    6
1    6
9    7

看起来sort也按值进行排序,但是到位:

s.sort()
s

输出

2    0
1    3
7    6
1    6
9    7

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

2 个答案:

答案 0 :(得分:12)

您的问题:这是( Series.sort就地v.s. Series.order return-new-obj )这两种方法之间的唯一区别吗?

在大熊猫0.17.0最终版本之前(即2015-10-09之前)

简答:是的。它们在功能上是等价的。

更长的答案:

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

  

按值对值和索引标签进行排序。默认情况下,这是 inplace sort Series.order是等效的,但会返回一个新系列。

所以

>>> s = pd.Series([3,4,0,3]).sort()
>>> s

什么都不输出。有关详细信息,请参阅the answer here

pandas.Series.order():不会更改对象,而是返回一个新的已排序对象。

  

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

大熊猫0.17.0最终释放后(即2015-10-09之后)

排序的API是changed,事情变得更清晰,更愉快。

要按排序,Series.sort()Series.order()都是 DEPRECATED ,由新的Series.sort_values() api取代,返回一个已排序的Series对象。

总结变化(摘录自pandas 0.17.0 doc):

To sort by the values (A * marks items that will show a FutureWarning):

        Previous              |         Replacement
------------------------------|-----------------------------------
* Series.order()              |  Series.sort_values()
* Series.sort()               |  Series.sort_values(inplace=True)
* DataFrame.sort(columns=...) |  DataFrame.sort_values(by=...) 

答案 1 :(得分:2)

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

def sort(self, axis=0, ascending=True, kind='quicksort', na_position='last', inplace=True):
        return self.order(ascending=ascending,
                          kind=kind,
                          na_position=na_position,
                          inplace=inplace)

将此与声明的命令行(我使用的是0.14.1)进行比较

def order(self, na_last=None, ascending=True, kind='quicksort', na_position='last', inplace=False)

你可以看到,由于sort调用了order函数,因此除了默认参数之外,它们的所有意图和目的都相同。

如问题中所述,排序inplace和订单inplace = True的{​​{1}}参数的默认值不同,但行为没有其他差异。

另一个唯一的区别是订单有inplace = False形式的附加(但已弃用)参数,您不能使用它排序(并且不应该使用)。