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
这是两种方法之间的唯一区别吗?
答案 0 :(得分:12)
您的问题:这是( Series.sort
就地v.s. Series.order
return-new-obj )这两种方法之间的唯一区别吗?
简答:是的。它们在功能上是等价的。
更长的答案:
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
是等效的,但作为一种就地方法。
排序的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
形式的附加(但已弃用)参数,您不能使用它排序(并且不应该使用)。