pandas中ix的使用详细讲解

拾柒
拾柒
发布时间:2026-10-11| 2人浏览过
原创

本文详细讲解pandas中ix的用法及其在0.20.0版本后的弃用原因。ix曾尝试结合loc和iloc的功能,但因其行为复杂且易引发歧义,官方建议使用iloc(基于位置)和loc(基于标签)替代。文章通过具体代码示例,展示了ix在不同索引类型下的行为,并提供了使用iloc和get_loc实现复杂切片的替代方案。

pandas中ix的使用与弃用

在pandas的早期版本中,ix是一个常用的数据切片工具。然而,从pandas 0.20.0版本开始,ix已被正式弃用。官方推荐使用iloc和loc来替代ix,以获得更明确和一致的行为。

ix的行为机制

ix的设计初衷是尝试像loc一样通过标签获取行或列,但如果标签不存在,则会回退为iloc的行为,即通过位置(整数)获取行或列。这种混合行为在特定情况下可能导致混淆和错误。

  • 当索引仅为整数类型时,ix仅使用基于标签的索引。如果标签不存在,会引发错误。
  • 当索引包含非整数类型时,ix对整数使用基于位置的索引,对非整数使用基于标签的索引。

代码示例

以下代码示例展示了ix在不同索引类型下的行为:

>>> s = pd.Series(np.nan, index=[49,48,47,46,45, 1, 2, 3, 4, 5])
>>> s
49 NaN
48 NaN
47 NaN
46 NaN
45 NaN
1 NaN
2 NaN
3 NaN
4 NaN
5 NaN
>>> s.iloc[:3] # slice the first three rows
49 NaN
48 NaN
47 NaN
 
>>> s.loc[:3] # slice up to and including label 3
49 NaN
48 NaN
47 NaN
46 NaN
45 NaN
1 NaN
2 NaN
3 NaN
 
>>> s.ix[:3] # the integer is in the index so s.ix[:3] works like loc
49 NaN
48 NaN
47 NaN
46 NaN
45 NaN
1 NaN
2 NaN
3 NaN
>>> s.iloc[:6]
49 NaN
48 NaN
47 NaN
46 NaN
45 NaN
1 NaN
 
>>> s.loc[:6]
KeyError: 6
 
>>> s.ix[:6]
KeyError: 6

在混合类型索引的情况下,ix的行为如下:

>>> s2 = pd.Series(np.nan, index=['a','b','c','d','e', 1, 2, 3, 4, 5])
>>> s2.index.is_mixed() # index is mix of different types
True
>>> s2.ix[:6] # now behaves like iloc given integer
a NaN
b NaN
c NaN
d NaN
e NaN
1 NaN
>>> s2.ix[:'c'] # behaves like loc given non-integer
a NaN
b NaN
c NaN

替代方案

由于ix已被弃用,建议使用iloc和loc来实现复杂切片。例如,可以使用get_loc()获取标签在索引中的位置,并结合iloc进行切片:

>>> df = pd.DataFrame(np.nan, 
      index=list('abcde'),
      columns=['x','y','z', 8, 9])
>>> df
 x y z 8 9
a NaN NaN NaN NaN NaN
b NaN NaN NaN NaN NaN
c NaN NaN NaN NaN NaN
d NaN NaN NaN NaN NaN
e NaN NaN NaN NaN NaN
>>> df.ix[:'c', :4]
 x y z 8
a NaN NaN NaN NaN
b NaN NaN NaN NaN
c NaN NaN NaN NaN
>>> df.iloc[:df.index.get_loc('c') + 1, :4]
 x y z 8
a NaN NaN NaN NaN
b NaN NaN NaN NaN
c NaN NaN NaN NaN

通过上述示例,我们可以看到iloc和loc的组合使用可以实现与ix相同的功能,同时避免了ix的歧义和潜在错误。

总结

在pandas的后续版本中,ix已被弃用,推荐使用iloc和loc进行数据切片。通过结合使用这两个方法,可以实现更明确和一致的数据操作。

以上就是pandas中ix的使用详细讲解的详细内容,更多关于pandas数据切片、iloc和loc的资料请关注本站其它相关文章!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。