【问题标题】:Why calling .sort() function on Pandas Series sorts its values in-place and returns nothing? [duplicate]为什么在 Pandas Series 上调用 .sort() 函数会对其值进行就地排序并且什么也不返回? [复制]
【发布时间】:2014-07-25 19:35:04
【问题描述】:

对不起,我认为我在这里遗漏了一些非常基本的东西:

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

输出无,而

>>> Series([3,4,0,3]).order()
2    0
0    3
3    3
1    4
dtype: int64

我在 sort() 中缺少什么?

谢谢

编辑:

感谢您的回答,我现在确实意识到这是就地排序。但我不明白为什么

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

不返回排序后的系列。如果我理解the manual,它应该返回已排序的系列。

【问题讨论】:

标签: python python-3.x pandas


【解决方案1】:

.sort() 排序就地

这意味着在您调用.sort() 之后,您的现有数组 已被排序。它不返回任何东西。

以“核心”Python 为例:

In [175]: L = [2, 3, 1, 5]

In [176]: L.sort()

In [177]: print(L)
[1, 2, 3, 5]

Pandas.sort 记录的 Pandas 也是如此:

按值对值和索引标签进行排序。为了与 ndarray API 兼容。无返回值

另请参阅:What's the difference between Series.sort() and Series.order()?

【讨论】:

  • 此解决方案对于 Pandas 已过时,请参阅其他答案。
  • 检查我的答案,它显示了最新版本的 Pandas 关于如何就地排序系列值或创建排序元素的新系列对象。
【解决方案2】:

与大多数其他 python 可迭代对象一样,Series.sort() 实际上只返回对 Series 进行排序就地排序。例如,请参阅对 python 列表进行排序:

In [2]: foo = [5, 3, 9]

In [3]: foo.sort()

In [4]: foo
Out[4]: [3, 5, 9]

【讨论】:

    【解决方案3】:
    In [1]: import pandas as pd
    In [2]: s = pd.Series([3,4,0,3]).sort()
    In [3]: s
    

    确实In [3] 不会输出任何内容,您可以查看:

    In [4]: type(s)
    Out[4]: NoneType
    

    原因:

    pd.Series([3,4,0,3]) 确实返回了 pandas Series 类型的对象,但 Series.sort() 方法 不返回任何内容,因为 inplace 排序。所以 LHS 中的表达式 s = pd.Series([3,4,0,3]).sort(), s 没有从 RHS 得到任何东西,因此 In [3]: s 什么也不输出。

    请注意:

    0.17.0版本之后,value排序方法pandas.Series.sort()pandas.Series.order()被弃用,取而代之的是统一的pandas.Series.sort_values() API。详情请见this answer

    【讨论】:

    • 这个答案现在比接受的答案更正确。 Pandas 下==0.22 Series.sort_values() 是正确的。
    【解决方案4】:

    .sort()order() 函数均已弃用

    .sort_values() 功能是替代品,这里是如何使用它的示例。

    例子:

    import numpy as np
    import pandas as pd
    
    arr = np.array([1,3,4,2])
    series = pd.Series(arr)
    

    升序
    相当于旧版本的 .order() 函数。

    ascending = series.sort_values() 
    


    降序
    等价于 .order(ascending=False)

    descending = series.sort_values(ascending=False)
    


    就地
    相当于旧版本的 .sort()。

    series.sort_values(inplace=True) 
    

    For more info, check official documentation here

    【讨论】:

      猜你喜欢
      • 2019-11-03
      • 1970-01-01
      • 1970-01-01
      • 2019-10-21
      • 2021-01-13
      • 1970-01-01
      • 2020-04-28
      相关资源
      最近更新 更多