web-dev-qa-db-fra.com

Pourquoi l'appel de la fonction .sort () sur Pandas Series trie ses valeurs sur place et ne renvoie rien?

Désolé, je pense qu'il me manque quelque chose de très fondamental ici:

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

sorties Aucune, tandis que

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

qu'est-ce qui me manque avec sort ()?

Merci

EDIT:

Merci pour les réponses, je réalise maintenant que le tri est en place. Mais je ne comprends pas pourquoi

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

ne retourne pas la série triée. Si je comprends bien le manuel il devrait renvoyer la série triée sur place.

11
meto

.sort() trie in-place .

Cela signifie qu’après avoir appelé .sort(), votre tableau existant a été trié. Il ne retourne rien.

Pour prendre un exemple de "noyau" Python:

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

In [176]: L.sort()

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

C'est la même chose pour les Pandas, documentée par Pandas.sort :

Trier les valeurs et les étiquettes d'index par valeur, à la place. Pour la compatibilité avec l'API ndarray. Aucune valeur de retour

Voir aussi:Quelle est la différence entre Series.sort () et Series.order ()?

4
gerrit
In [1]: import pandas as pd
In [2]: s = pd.Series([3,4,0,3]).sort()
In [3]: s

En effet, In [3] ne restituera rien, comme vous pouvez le vérifier:

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

La raison:

pd.Series([3,4,0,3]) renvoie en effet un objet de type pandas Series, MAIS Series.sort(), méthode ne renvoie rien à cause de inplace le tri. Ainsi, l'expression s = pd.Series([3,4,0,3]).sort(), s dans LHS n'obtient rien à partir de RHS, donc In [3]: s ne génère rien.

Notez que:

Après la version 0.17.0 , le tri par valeur méthodes pandas.Series.sort() et pandas.Series.order() sont DEPRECATED, remplacés par unpandas.Series.sort_values()API unifié. Voir cette réponse pour plus de détails.

4
YaOzI

Les deux .sort () et order () les fonctions sontOBSOLÈTES

.sort_values ​​() function est le remplacement et voici un exemple d'utilisation.

Exemple:

import numpy as np
import pandas as pd

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

Ordre croissant
Équivalent à la fonction .order () des anciennes versions.

ascending = series.sort_values() 


Ordre décroissant
Équivalent à .order (ascending = False)

descending = series.sort_values(ascending=False)


In Place
Équivalent à .sort () d'anciennes versions.

series.sort_values(inplace=True) 

Pour plus d'informations, consultez la documentation officielle ici

3
Aniruddha Kalburgi

Comme avec la plupart des autres itérables en python, Series.sort () ne renvoie en réalité que le tri de la série à la place. Voir par exemple le tri d'une liste python:

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

In [3]: foo.sort()

In [4]: foo
Out[4]: [3, 5, 9]
0
Christian Geier