DataFrame.sort_index
не следит за Command-Query separation principle, который говорит, что функция должна быть либо команды или запроса, но не оба.
- Команды делают что-то вроде изменения вызывающего абонента (например, DataFrame) и должен вернуть
None
. (В языках, которые это позволяют, команды ничего не должны возвращать, но поскольку все функции возвращают что-то в Python, соглашение должно возвращать None
.)
- Запросы вычисляют и возвращают результат , но не изменяют вызывающего абонента.
inplace=True
sort_index
a команда. Метод изменяет вызывающий DataFrame и в соответствии с принципом Command-Query возвращает None
.
inplace=False
(по умолчанию) делает запрос sort_index
. Таким образом, если вы хотите вернуть sort_index
DataFrame, удалите inplace=True
.
Действительно "inplace" operations как list.sort
изменить исходные данные без используя вспомогательные структуры данных. В этом смысле никакая операция «Панда» действительно не на месте. Когда используется inplace=True
, результат сначала вычисляется в вспомогательной структуре данных (например, другой DataFrame), а затем базовые данные копируются в оболочку исходного DataFrame. Так
df.sort_level(inplace=True)
эквивалентно
df = df.sort_level()
inplace=True
существует в основном из-за инерции истории. Ведущий разработчик панд, Jeff Reback says:
Мое личное мнение: я никогда не использую в месте операции. Синтаксис сложнее читать, и он не дает никаких преимуществ.
Я предполагаю, что он сортируется на месте ... Поскольку он мутирует исходный объект ('levelData'), нет ничего, что могло бы вернуть, что у вас еще нет простого элемента управления. – mgilson
Попробуйте 'levelData.sort_index (axis = 1, inplace = True)' –
@NickilMaveli Я попробовал, но его не работает – OleksandraK