127 votes

L'objet 'DataFrame' ne possède pas d'attribut 'sort'.

Je rencontre un problème ici, dans mon paquetage python j'ai installé numpy mais j'ai toujours cette erreur :

L'objet 'DataFrame' ne possède pas d'attribut 'sort'.

Quelqu'un peut me donner une idée

Voici mon code :

final.loc[-1] =['', 'P','Actual']
final.index = final.index + 1  # shifting index
final = final.sort()
final.columns=[final.columns,final.iloc[0]]
final = final.iloc[1:].reset_index(drop=True)
final.columns.names = (None, None)

263voto

Brad Solomon Points 11873

sort() a été déprécié pour les DataFrames en faveur de l'un ou l'autre :

sort() a été déprécié (mais toujours disponible) dans Pandas à partir de la version 0.17 (2015-10-09) avec l'introduction de la fonction sort_values() y sort_index() . Il a été supprimé de Pandas avec la version 0.20 (2017-05-05).

2 votes

Quel était le comportement par défaut de l'ancien tri ? Cela serait utile pour savoir laquelle des nouvelles versions doit être utilisée à la place. L'ancienne documentation semble un peu désespérée à ce sujet, par exemple, elle ne dit même pas ce qui se passe lorsque l'argument par défaut columns=None est utilisé.

23voto

coldspeed Points 111053

Tri des pandas 101

sort a été remplacé dans la v0.20 par DataFrame.sort_values y DataFrame.sort_index . En plus de cela, nous avons aussi argsort .

Voici quelques cas d'utilisation courants en matière de tri, et comment les résoudre à l'aide des fonctions de tri de l'API actuelle. Tout d'abord, la configuration.

# Setup
np.random.seed(0)
df = pd.DataFrame({'A': list('accab'), 'B': np.random.choice(10, 5)})    
df                                                                                                                                        
   A  B
0  a  7
1  c  9
2  c  3
3  a  5
4  b  2

Trier par une seule colonne

Par exemple, pour trier df par la colonne "A", utiliser sort_values avec un seul nom de colonne :

df.sort_values(by='A')

   A  B
0  a  7
3  a  5
4  b  2
1  c  9
2  c  3

Si vous avez besoin d'un nouveau RangeIndex, utilisez DataFrame.reset_index .

Trier par plusieurs colonnes

Par exemple, pour trier par les deux col "A" et "B" dans df vous pouvez passer une liste à sort_values :

df.sort_values(by=['A', 'B'])

   A  B
3  a  5
0  a  7
4  b  2
2  c  3
1  c  9

Trier par l'index du cadre de données

df2 = df.sample(frac=1)
df2

   A  B
1  c  9
0  a  7
2  c  3
3  a  5
4  b  2

Vous pouvez le faire en utilisant sort_index :

df2.sort_index()

   A  B
0  a  7
1  c  9
2  c  3
3  a  5
4  b  2

df.equals(df2)                                                                                                                            
# False
df.equals(df2.sort_index())                                                                                                               
# True

Voici quelques méthodes comparables avec leurs performances :

%timeit df2.sort_index()                                                                                                                  
%timeit df2.iloc[df2.index.argsort()]                                                                                                     
%timeit df2.reindex(np.sort(df2.index))                                                                                                   

605 µs ± 13.6 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
610 µs ± 24.2 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
581 µs ± 7.63 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)

Trier par liste d'indices

Par exemple,

idx = df2.index.argsort()
idx
# array([0, 7, 2, 3, 9, 4, 5, 6, 8, 1])

Ce problème de "tri" est en fait un simple problème d'indexation. Il suffit de passer des étiquettes entières à iloc fera l'affaire.

df.iloc[idx]

   A  B
1  c  9
0  a  7
2  c  3
3  a  5
4  b  2

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X