Подтвердить что ты не робот

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

Я сталкиваюсь с некоторыми проблемами здесь, в моем пакете 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)
4b9b3361

Ответ 1

sort() устарела для DataFrames в пользу:

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

Ответ 2

Панды Сортировка 101

В v0.20 sort была заменена на 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.

Сортировать по нескольким столбцам

Например, чтобы отсортировать по столбцам "A" и "B" в 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

Сортировать по индексу фрейма данных

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 целочисленные метки в iloc.

df.iloc[idx]

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

Ответ 3

sort теперь устарела. Вы можете использовать sort_values чтобы сделать это,

df.sort_values(by=['col1', 'col2'])