O objeto 'DataFrame' não tem o atributo 'sort'


101

Eu enfrento alguns problemas aqui, no meu pacote python eu instalei numpy, mas ainda tenho este erro 'DataFrame' objeto não tem atributo 'sort'

Qualquer um pode me dar uma ideia ..

Este é o meu código:

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)

Respostas:


220

sort() foi descontinuado para DataFrames em favor de:

sort()foi descontinuado (mas ainda está disponível) no Pandas com a versão 0.17 (2015-10-09) com a introdução de sort_values()e sort_index(). Ele foi removido do Pandas com versão 0,20 (05-05-2017).


15

Pandas Classificando 101

sortfoi substituído na v0.20 por DataFrame.sort_valuese DataFrame.sort_index. Além disso, também temos argsort.

Aqui estão alguns casos de uso comuns em classificação e como resolvê-los usando as funções de classificação na API atual. Primeiro, a configuração.

# 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

Classificar por coluna única

Por exemplo, para classificar dfpela coluna "A", use sort_valuescom um único nome de coluna:

df.sort_values(by='A')

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

Se você precisar de um RangeIndex novo, use DataFrame.reset_index.

Classificar por várias colunas

Por exemplo, para classificar por tanto col "A" e "B" em df, você pode passar uma lista para 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

Classificar por índice DataFrame

df2 = df.sample(frac=1)
df2

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

Você pode fazer isso 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

Aqui estão alguns métodos comparáveis ​​com seu desempenho:

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

Classificar por lista de índices

Por exemplo,

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

Esse problema de "classificação" é, na verdade, um problema simples de indexação. Basta passar rótulos de inteiros para iloc.

df.iloc[idx]

   A  B
1  c  9
0  a  7
2  c  3
3  a  5
4  b  2
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.