Is .ix() always better than .loc() and .iloc() since it is faster and supports integer and label access?

PythonPandas

Python Problem Overview


I'm learning the Python pandas library. Coming from an R background, the indexing and selecting functions seem more complicated than they need to be. My understanding it that .loc() is only label based and .iloc() is only integer based.

Why should I ever use .loc() and .iloc() if .ix() is faster and supports integer and label access?

Python Solutions


Solution 1 - Python

Please refer to the doc Different Choices for Indexing, it states clearly when and why you should use .loc, .iloc over .ix, it's about explicit use case:

> .ix supports mixed integer and label based access. It is primarily > label based, but will fall back to integer positional access unless > the corresponding axis is of integer type. .ix is the most general and > will support any of the inputs in .loc and .iloc. .ix also supports > floating point label schemes. .ix is exceptionally useful when dealing > with mixed positional and label based hierachical indexes. > > However, when an axis is integer based, ONLY label based access and > not positional access is supported. Thus, in such cases, it’s usually > better to be explicit and use .iloc or .loc.

Update 22 Mar 2017

Thanks to comment from @Alexander, Pandas is going to deprecate ix in 0.20, details in here.

One of the strong reason behind is because mixing indexes -- positional and label (effectively using ix) has been a significant source of problems for users.

It is expected to migrate to use iloc and loc instead, here is a link on how to convert code.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionmegashiggerView Question on Stackoverflow
Solution 1 - PythonAnzelView Answer on Stackoverflow