.ix() 是不是总是比 .loc() 和 .iloc() 更好,因为它更快并且支持整数和标签访问?

Posted

技术标签:

【中文标题】.ix() 是不是总是比 .loc() 和 .iloc() 更好,因为它更快并且支持整数和标签访问?【英文标题】:Is .ix() always better than .loc() and .iloc() since it is faster and supports integer and label access?.ix() 是否总是比 .loc() 和 .iloc() 更好,因为它更快并且支持整数和标签访问? 【发布时间】:2015-02-24 09:26:19 【问题描述】:

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

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

【问题讨论】:

这个答案here 应该很有帮助! 永远不要使用 .ix! Here is an even more helpful answer .loc.iloc[] 之间的区别 pandas iloc vs ix vs loc explanation?的可能重复 【参考方案1】:

请参考文档Different Choices for Indexing,它清楚地说明了何时以及为什么应该使用 .loc, .iloc 而不是 .ix,它是关于明确的用例:

.ix 支持混合整数和基于标签的访问。它主要是 基于标签,但将回退到整数位置访问,除非 对应的轴是整数类型。 .ix 是最通用的 将支持 .loc 和 .iloc 中的任何输入。 .ix 还支持 浮点标签方案。 .ix 在交易时特别有用 具有混合的基于位置和标签的分层索引。

但是,当轴基于整数时,仅基于标签的访问和 不支持位置访问。因此,在这种情况下,通常 最好是明确的并使用 .iloc 或 .loc。

2017 年 3 月 22 日更新

感谢@Alexander 的评论,Pandas 将在 0.20 中弃用 ix,详情请参阅 here。

其中一个重要原因是因为混合索引——位置和标签(有效地使用ix)一直是用户问题的重要来源。

预计会迁移到使用ilocloc,这是how to convert code 上的链接。

【讨论】:

您能否澄清一下“但是,当轴基于整数时,仅支持基于标签的访问而不支持位置访问。因此,在这种情况下,通常最好明确并使用 .iloc或 .loc。”方法?那部分对我来说是朦胧的 @AZhao,我想我不明白你想让我澄清什么,你想知道索引选择之间的区别还是如何确定“显式”?也许你会读到Difference choices of indexing。 @AZhao,我认为这意味着如果您使用整数 as 您的标签(可能与其列顺序不对应),那么它将无法区分你指的是哪一个。如果我误解了,请有人纠正我。 看来.ix 索引器将在 Pandas 0.20.0 pandas-docs.github.io/pandas-docs-travis/… 中被弃用 @Alexander - 感谢您的弃用说明,我将更新答案以反映这一点:)

以上是关于.ix() 是不是总是比 .loc() 和 .iloc() 更好,因为它更快并且支持整数和标签访问?的主要内容,如果未能解决你的问题,请参考以下文章

Pandas中iloc/loc/ix区别

Pandas -ix loc iloc

pandas 定位 loc,iloc,ix

Python Pandas DataFrame:查询数据or选择数据(selection)之loc,iloc,at,iat,ix的用法和区别

pandas loc iloc ix用法详解

pandas loc iloc ix用法详解