Всегда ли.ix() лучше, чем.loc() и.iloc(), поскольку он быстрее и поддерживает целочисленный доступ и доступ к меткам?

Я изучаю библиотеку панд Python. Исходя из R-фона, функции индексирования и выбора кажутся более сложными, чем они должны быть. Насколько я понимаю, что.loc () основана только на метках, а.iloc () - только на целых числах.

Почему я должен когда-либо использовать.loc () и.iloc (), если.ix () быстрее и поддерживает доступ к целым числам и меткам?

2 ответа

Решение

Пожалуйста, обратитесь к документу " Различные варианты индексации", там четко указано, когда и почему вы должны использовать .loc,.iloc вместо.ix, речь идет о явном случае использования:

.ix поддерживает смешанный доступ на основе целых чисел и меток. В основном это основано на метках, но будет возвращаться к целочисленному позиционному доступу, если соответствующая ось не имеет целочисленный тип..ix является наиболее общим и поддерживает любые входные данные в.loc и.iloc..ix также поддерживает схемы меток с плавающей запятой..ix исключительно полезен при работе со смешанными позиционными и основанными на метках иерархическими индексами.

Однако, когда ось основана на целых числах, поддерживается ТОЛЬКО доступ на основе меток, а не позиционный доступ. Таким образом, в таких случаях обычно лучше быть явным и использовать.iloc или.loc.

Надеюсь это поможет.

Обновление 22 марта 2017

Благодаря комментарию от @Alexander, Pandas собирается отказаться от ix в 0,20, подробности здесь.

Одна из веских причин заключается в том, что смешивание индексов - позиционных и меток (эффективное использование ix) был значительным источником проблем для пользователей.

Ожидается миграция для использования iloc а также loc вместо этого, вот ссылка на то, как конвертировать код.

DataFrame.ixбыл полностью удален с момента выпуска Pandas 1.0.0 в январе 2020 года, см. https://pandas.pydata.org/pandas-docs/stable/whatsnew/v1.0.0.html#removal-of-prior-version-deprecations-changes .

Другие вопросы по тегам