.ix()是否总是优于.loc()和.iloc(),因为它更快且支持整数和标签访问?

69

我正在学习Python的pandas库。来自R背景,索引和选择功能似乎比必要的要复杂。我理解.loc()只基于标签,.iloc()只基于整数。

如果.ix()更快且支持整数和标签访问,那么我为什么要使用.loc()和.iloc()呢?


1
这个答案在这里应该非常有帮助! - YaOzI
2
永远不要使用 **.ix**!这里有一个更加有用的答案,解释了 .loc.iloc[] 之间的区别:https://dev59.com/31wZ5IYBdhLWcg3wVO5U#46915810 - Ted Petrou
可能是[pandas iloc vs ix vs loc explanation?]的重复问题(https://dev59.com/31wZ5IYBdhLWcg3wVO5U)。 - Yolo Voe
2个回答

71
请参考文档Different Choices for Indexing,它清楚地说明了何时以及为什么应该使用.loc、.iloc而不是.ix,这涉及到明确的用例:
.ix支持混合整数和基于标签的访问。它主要是基于标签的,但如果相应的轴是整数类型,则会回退到整数位置访问。 .ix是最通用的,并且将支持.loc和.iloc中的任何输入。 .ix还支持浮点标签方案。在处理混合位置和基于标签的分层索引时,.ix非常有用。
然而,在轴是基于整数的情况下,仅支持基于标签的访问而不是位置访问。因此,在这种情况下,最好明确使用.iloc或.loc。

更新 2017年3月22日

感谢@Alexander的评论,Pandas将在0.20中停用ix,详情请见这里
背后的一个强烈原因是混合索引--位置和标签(有效使用ix)一直是用户问题的重要来源。
预计将使用ilocloc进行迁移,这里有一个链接,介绍如何转换代码

1
你能澄清一下“然而,当轴是基于整数时,仅支持基于标签的访问而不支持位置访问。因此,在这种情况下,最好明确使用.iloc或.loc。”这句话是什么意思吗?对我来说那部分很模糊。 - AZhao
1
@AZhao,我觉得我不明白你希望我澄清什么,你想知道索引选择之间的区别还是如何确定"显式"?也许你可以阅读索引不同选择 - Anzel
3
@AZhao,我认为这意味着如果您将整数用作标签(可能与它们的列顺序不对应),那么它将无法区分您指的是哪个标签。如果我理解有误,请有人纠正我。 - Neal
3
看起来,在Pandas 0.20.0版本中,.ix索引器将被弃用。 http://pandas-docs.github.io/pandas-docs-travis/whatsnew.html#deprecate-ix - Alexander
@Alexander - 感谢您的弃用注释,我会更新答案以反映这一点 :) - Anzel

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接