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.
.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 ()?
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.
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
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]