Objek 'DataFrame' tidak memiliki atribut 'sort'

101

Saya menghadapi beberapa masalah di sini, dalam paket python saya, saya telah menginstal numpy, tetapi saya masih memiliki kesalahan ini, objek 'DataFrame' tidak memiliki atribut 'sort'

Siapapun bisa memberi saya ide ..

Ini kode saya:

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
sumber

Jawaban:

220

sort() tidak digunakan lagi untuk DataFrames karena mendukung:

sort()sudah usang (tapi masih tersedia) di Pandas dengan rilis 0.17 (2015-10-09) dengan pengenalan sort_values()dan sort_index(). Itu telah dihapus dari Pandas dengan rilis 0.20 (2017-05-05).

Brad Solomon
sumber
15

Penyortiran Panda 101

sorttelah diganti di v0.20 oleh DataFrame.sort_valuesdan DataFrame.sort_index. Selain itu, kami juga punya argsort.

Berikut ini beberapa kasus penggunaan umum dalam pengurutan, dan cara menyelesaikannya menggunakan fungsi pengurutan di API saat ini. Pertama, penyiapan.

# 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

Urutkan berdasarkan Kolom Tunggal

Misalnya, untuk mengurutkan dfberdasarkan kolom "A", gunakan sort_valuesdengan satu nama kolom:

df.sort_values(by='A')

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

Jika Anda membutuhkan RangeIndex baru, gunakan DataFrame.reset_index.

Sortir menurut Beberapa Kolom

Misalnya, untuk mengurutkan oleh kedua col "A" dan "B" di df, Anda dapat melewati daftar ke 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

Urutkan Berdasarkan Indeks DataFrame

df2 = df.sample(frac=1)
df2

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

Anda dapat melakukannya dengan menggunakan 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

Berikut beberapa metode yang sebanding dengan kinerjanya:

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

Urutkan berdasarkan Daftar Indeks

Sebagai contoh,

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

Masalah "pengurutan" ini sebenarnya adalah masalah pengindeksan sederhana. Hanya meneruskan label integer ke ilocakan dilakukan.

df.iloc[idx]

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