.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
)一直是用户问题的重要来源。
预计会迁移到使用iloc
和loc
,这是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() 更好,因为它更快并且支持整数和标签访问?的主要内容,如果未能解决你的问题,请参考以下文章
Python Pandas DataFrame:查询数据or选择数据(selection)之loc,iloc,at,iat,ix的用法和区别