2016-06-06 1 views
-3

Я попытался отсортировать данные по индексу и не имеет результата. Почему так происходит? Это мой кадр данных http://screencast.com/t/zOEuR6Uu И я призываю:Почему DataFrame.sort_index не удаляется?

levelData.sort_index(inplace = True) 

Нет (((

levelData.info() 
<class 'pandas.core.frame.DataFrame'> 
Index: 525 entries, 1 to 99 
Data columns (total 2 columns): 
win  525 non-null int64 
action 525 non-null int64 
dtypes: int64(2) 
memory usage: 12.3+ KB 
+0

Я предполагаю, что он сортируется на месте ... Поскольку он мутирует исходный объект ('levelData'), нет ничего, что могло бы вернуть, что у вас еще нет простого элемента управления. – mgilson

+0

Попробуйте 'levelData.sort_index (axis = 1, inplace = True)' –

+0

@NickilMaveli Я попробовал, но его не работает – OleksandraK

ответ

3

DataFrame.sort_index не следит за Command-Query separation principle, который говорит, что функция должна быть либо команды или запроса, но не оба.

  • Команды делают что-то вроде изменения вызывающего абонента (например, DataFrame) и должен вернуть None. (В языках, которые это позволяют, команды ничего не должны возвращать, но поскольку все функции возвращают что-то в Python, соглашение должно возвращать None.)
  • Запросы вычисляют и возвращают результат , но не изменяют вызывающего абонента.

inplace=Truesort_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:

Мое личное мнение: я никогда не использую в месте операции. Синтаксис сложнее читать, и он не дает никаких преимуществ.

+0

, когда я удаляю inplace = True фрейм данных не изменяется после sort_index – OleksandraK

+0

@OleksandraK: Конечно, нет. В этом случае новый элемент данных возвращается из функции в этом случае *, как было четко указано в начале этого ответа *. – SiHa