Объект 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)
Ответы
Ответ 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'])