El objeto 'DataFrame' no tiene atributo 'sort'

101

Me enfrento a un problema aquí, en mi paquete de python he instalado numpy, pero todavía tengo este error El objeto 'DataFrame' no tiene atributo 'sort'

Cualquiera puede darme una idea ...

Este es mi codigo:

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)
Shi Jie Tio
fuente

Respuestas:

220

sort() fue obsoleto para DataFrames a favor de:

sort()quedó obsoleto (pero aún está disponible) en Pandas con la versión 0.17 (2015-10-09) con la introducción de sort_values()y sort_index(). Se eliminó de Pandas con la versión 0.20 (2017-05-05).

Brad Solomon
fuente
15

Clasificación de pandas 101

sortha sido reemplazado en v0.20 por DataFrame.sort_valuesy DataFrame.sort_index. Aparte de esto, también tenemos argsort.

A continuación, se muestran algunos casos de uso comunes en la clasificación y cómo resolverlos utilizando las funciones de clasificación en la API actual. Primero, la configuración.

# 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

Ordenar por columna única

Por ejemplo, para ordenar dfpor columna "A", utilice sort_valuescon un solo nombre de columna:

df.sort_values(by='A')

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

Si necesita un RangeIndex nuevo, utilice DataFrame.reset_index .

Ordenar por varias columnas

Por ejemplo, para ordenar por la columna "A" y "B" en df, puede pasar una lista a 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

Ordenar por índice de marco de datos

df2 = df.sample(frac=1)
df2

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

Puedes hacer esto usando 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

A continuación, se muestran algunos métodos comparables con su rendimiento:

%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)

Ordenar por lista de índices

Por ejemplo,

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

Este problema de "clasificación" es en realidad un simple problema de indexación. Basta con pasar etiquetas enteras a iloc.

df.iloc[idx]

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