Đối tượng 'DataFrame' không có thuộc tính 'sắp xếp'


101

Tôi gặp một số vấn đề ở đây, trong gói python của tôi, tôi đã cài đặt numpy, nhưng tôi vẫn gặp lỗi này Đối tượng 'DataFrame' không có thuộc tính 'sắp xếp'

Bất cứ ai có thể cho tôi một số ý tưởng ..

Đây là mã của tôi:

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)

Câu trả lời:


220

sort() không được chấp nhận đối với DataFrames vì:

sort()đã không được dùng nữa (nhưng vẫn khả dụng) trong Pandas với bản phát hành 0.17 (2015-10-09) với sự ra đời của sort_values()sort_index(). Nó đã bị xóa khỏi Pandas với bản phát hành 0.20 (2017-05-05).


15

Phân loại gấu trúc 101

sortđã được thay thế trong v0.20 bởi DataFrame.sort_valuesDataFrame.sort_index. Bên cạnh điều này, chúng tôi cũng có argsort.

Dưới đây là một số trường hợp sử dụng phổ biến trong sắp xếp và cách giải quyết chúng bằng cách sử dụng các hàm sắp xếp trong API hiện tại. Đầu tiên, thiết lập.

# 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

Sắp xếp theo một cột

Ví dụ: để sắp xếp dftheo cột "A", hãy sử dụng sort_valuesvới một tên cột duy nhất:

df.sort_values(by='A')

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

Nếu bạn cần một RangeIndex mới, hãy sử dụng DataFrame.reset_index.

Sắp xếp theo nhiều cột

Ví dụ: để sắp xếp theo cả cột "A" và "B" df, bạn có thể chuyển một danh sách vào 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

Sắp xếp theo Chỉ mục DataFrame

df2 = df.sample(frac=1)
df2

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

Bạn có thể làm điều này bằng cách sử dụng 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

Dưới đây là một số phương pháp có thể so sánh với hiệu suất của chúng:

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

Sắp xếp theo danh sách chỉ số

Ví dụ,

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

Vấn đề "sắp xếp" này thực sự là một vấn đề lập chỉ mục đơn giản. Chỉ cần chuyển nhãn số nguyên đến ilocsẽ làm được.

df.iloc[idx]

   A  B
1  c  9
0  a  7
2  c  3
3  a  5
4  b  2
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.