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

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

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

Ответ 1

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

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

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

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

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

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

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

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