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

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

Brad Solomon
fonte
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
cs95
fonte