Об'єкт 'DataFrame' не має атрибута 'sort'


101

Тут я зіткнувся з деякою проблемою, у своєму пакеті python я встановив numpy, але у мене все ще є ця помилка , в об’єкта 'DataFrame' немає атрибута 'sort'

Будь-хто може дати мені якусь ідею ..

Це мій код:

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)

Відповіді:


220

sort() застаріло для DataFrames на користь будь-якого:

  • sort_values()щоб сортувати по колонці (и)
  • sort_index()для сортування за індексом

sort()був застарілий (але все ще доступний) у Pandas з випуском 0.17 (2015-10-09) із введенням sort_values()та sort_index(). Він був видалений з Pandas з випуском 0.20 (2017-05-05).


15

Сортування панд 101

sortбула замінена в v0.20 на DataFrame.sort_valuesі DataFrame.sort_index. Окрім цього, у нас також є argsort.

Ось кілька типових випадків використання сортування та способи їх вирішення за допомогою функцій сортування в поточному API. По-перше, налаштування.

# 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

Сортувати за одним стовпцем

Наприклад, для сортування dfза стовпцем "A" використовуйте sort_valuesодну назву стовпця:

df.sort_values(by='A')

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

Якщо вам потрібен свіжий RangeIndex, використовуйте DataFrame.reset_index.

Сортувати за кількома стовпцями

Наприклад, щоб відсортувати обидві колонки "А" та "В" df, ви можете передати список 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

Сортувати за індексом DataFrame

df2 = df.sample(frac=1)
df2

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

Це можна зробити за допомогою 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

Ось кілька порівняльних методів з їх ефективністю:

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

Сортувати за списком індексів

Наприклад,

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

Ця проблема "сортування" насправді є простою проблемою індексації. Просто буде передано цілі мітки iloc.

df.iloc[idx]

   A  B
1  c  9
0  a  7
2  c  3
3  a  5
4  b  2
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.