Всегда ли.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 .