L'oggetto "DataFrame" non ha l'attributo "sort"


101

Devo affrontare qualche problema qui, nel mio pacchetto python ho installato numpy, ma ho ancora questo errore L'oggetto 'DataFrame' non ha l'attributo 'sort'

Chiunque può darmi un'idea ..

Questo è il mio codice:

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)

Risposte:


220

sort() è stato deprecato per DataFrames a favore di:

sort()era deprecato (ma ancora disponibile) in Panda con la versione 0.17 (2015-10-09) con l'introduzione di sort_values()e sort_index(). È stato rimosso da Panda con la versione 0.20 (05/05/2017).


15

Pandas Sorting 101

sortè stato sostituito nella v0.20 da DataFrame.sort_valuese DataFrame.sort_index. A parte questo, abbiamo anche argsort.

Di seguito sono riportati alcuni casi d'uso comuni nell'ordinamento e come risolverli utilizzando le funzioni di ordinamento nell'API corrente. Innanzitutto, l'installazione.

# 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

Ordina per singola colonna

Ad esempio, per ordinare in dfbase alla colonna "A", utilizza sort_valuescon un unico nome di colonna:

df.sort_values(by='A')

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

Se hai bisogno di un nuovo RangeIndex, usa DataFrame.reset_index.

Ordina per più colonne

Ad esempio, per ordinare sia la colonna "A" che la "B" df, puoi passare un elenco 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

Ordina per indice DataFrame

df2 = df.sample(frac=1)
df2

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

Puoi farlo 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

Ecco alcuni metodi comparabili con le loro prestazioni:

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

Ordina per elenco di indici

Per esempio,

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

Questo problema di "ordinamento" è in realtà un semplice problema di indicizzazione. Basta passare etichette intere a iloc.

df.iloc[idx]

   A  B
1  c  9
0  a  7
2  c  3
3  a  5
4  b  2
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.