Python: pandas中ix的详细讲解

发布时间:2018-09-21 15:59,

浏览次数:2372

, 标签:

Python

pandas

ix

在上一篇博客

中,我们已经仔细讲解了iloc和loc,只是简单了提到了ix。这是因为相比于前2者,ix更复杂,也更让人迷惑。

因此,本篇博客通过例子的解释试图来描述清楚ix,尤其是与iloc和loc的联系。

目录

1 使用ix切分Series

1.1 特点1举例

1.2 特点2举例

2 在Dataframe中使用ix实现复杂切片

3 参考文献

首先,再次介绍这三种方法的概述:

* loc gets rows (or columns) with particular labels from the index. loc从索引

中获取具有特定标签的行(或列)。

* iloc gets rows (or columns) at particular positions in the index (so it

only takes integers). iloc在索引中的特定位置获取行(或列)(因此它只接受整数)。

* ix usually tries to behave like loc but falls back to behaving like iloc if

a label is not present in the

index. ix通常会尝试像loc一样行为,但如果索引中不存在标签,则会退回到像iloc一样的行为。(这句话有些绕口,没关系,关于ix特点,后面会详细讲解)

1 使用ix切分Series

请注意:在pandas版本0.20.0及其以后版本中,ix已经不被推荐使用,建议采用iloc和loc实现ix。这是为什么呢?这是由于ix的复杂特点可能使ix使用起来有些棘手:

* 如果索引是整数类型,则ix将仅使用基于标签的索引,而不会回退到基于位置的索引。如果标签不在索引中,则会引发错误。

*

如果索引不仅包含整数,则给定一个整数,ix将立即使用基于位置的索引而不是基于标签的索引。但是,如果ix被赋予另一种类型(例如字符串),则它可以使用基于标签的索引。

接下来举例说明这2个特点。

1.1 特点1举例

>>> 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

现在我们来看使用整数3切片有什么结果:

在这个例子中,s.iloc[:3]读取前3行(因为iloc把3看成是位置position),而s.loc[:3]

读取的是前8行(因为loc把3看作是索引的标签label)

>>> 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.ix[:3]返回的结果与s.loc[:3]一样,这是因为如果series的索引是整型的话,ix会首先去寻找索引中的标签3而不是去找位置3。

如果,我们试图去找一个不在索引中的标签,比如说是6呢?

>>> 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

在上面的例子中,s.iloc[:6]正如我们所期望的,返回了前6行。而,s.loc[:6]返回了KeyError错误,这是因为标签6并不在索引中。

那么,s.ix[:6]报错的原因是什么呢?正如我们在ix的特点1所说的那样,

如果索引只有整数类型,那么ix仅使用基于标签的索引,而不会回退到基于位置的索引。如果标签不在索引中,则会引发错误。

1.2 特点2举例

接着例子1来说,如果我们的索引是一个混合的类型,即不仅仅包括整型,也包括其他类型,如字符类型。那么,给ix一个整型数字,ix会立即使用iloc操作,而不是报KeyError错误。

>>> 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

注意:在这种情况下,ix也可以接受非整型,这样就是loc的操作:

>>> s2.ix[:'c'] # behaves like loc given non-integer a NaN b NaN c NaN

这个例子就说明了ix特点2。

正如前面所介绍的,ix的使用有些复杂。如果仅使用位置或者标签进行切片,使用iloc或者loc就行了,请避免使用ix。

2 在Dataframe中使用ix实现复杂切片

有时候,在使用Dataframe进行切片时,我们想混合使用标签和位置来对行和列进行切片。那么,应该怎么操作呢?

举例,考虑有下述例子中的Dataframe。我们想得到直到包含标签'c'的行和前4列。

>>> 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

在pandas的早期版本(0.20.0)之前,ix可以很好地实现这个功能。

我们可以使用标签来切分行,使用位置来切分列(请注意:因为4并不是列的名字,因为ix在列上是使用的iloc)。

>>> df.ix[:'c', :4] x y z 8 a NaN NaN NaN NaN b NaN NaN NaN NaN c NaN NaN NaN

NaN

在pandas的后来版本中,我们可以使用iloc和其它的一个方法就可以实现上述功能:

>>> 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

get_loc()

是得到标签在索引中的位置的方法。请注意,因为使用iloc切片时不包括最后1个点,因为我们必须加1。

可以看到,只使用iloc更好用,因为不必理会ix的那2个“繁琐”的特点。

3 参考文献

https://stackoverflow.com/questions/31593201/pandas-iloc-vs-ix-vs-loc-explanation-how-are-they-different

python中ix用法_Python: pandas中ix的详细讲解相关推荐

  1. python查看dataframe数据类型_python pandas中DataFrame类型数据操作函数的方法

    python数据分析工具pandas中DataFrame和Series作为主要的数据结构. 本文主要是介绍如何对DataFrame数据进行操作并结合一个实例测试操作函数. 1)查看DataFrame数 ...

  2. python format函数换行_python format函数/print 函数详细讲解(19)

    文章首发微信公众号,微信搜索:猿说python 在python开发过程中,print函数和format函数使用场景特别多,下面分别详细讲解两个函数的用法. 一.print函数 print翻译为中文指打 ...

  3. python中len用法_Python Pandas Series.str.len()用法及代码示例

    Python是进行数据分析的一种出色语言,主要是因为以数据为中心的Python软件包具有奇妙的生态系统. Pandas是其中的一种,使导入和分析数据更加容易. Pandas str.len()方法用于 ...

  4. python中iloc用法_python pandas --loc、iloc用法

    基础数据如下: import pandas as pd df = pd.DataFrame([ [1, 2,'河南','郑州','豫'], [4, 5,'河北','石家庄','冀'], [7, 8,' ...

  5. python pow函数用法_Python代码中pow()函数具有哪些功能呢?

    摘要: 下文讲述Python代码中pow()函数的功能说明,如下所示: pow函数功能说明 pow() 函数用于 计算 xy(x 的 y 次方) 的值 pow函数语法: import math mat ...

  6. python正则表达式group用法_Python 正则表达式中的group参数使用

    Python正则表达式re模块中有个group参数,刚开始看的时候没理解,自己摸索了一下,终于知道是啥意思了,记录一下. 先看一下教程中对这个参数的说明: 老实讲,看了这个描述我也没懂是啥意思,于是在 ...

  7. python中isinstance用法_Python内置isinstance函数详细介绍

    英文文档: isinstance(object, classinfo) Return true if the object argument is an instance of the classin ...

  8. python 正则 replace函数_python pandas中的str对象的replace函数

    网页链接​mp.weixin.qq.com replace函数本身并不复杂,但由于该函数和正则表达式结合会使其作用更加灵活,该函数的主要作用是根据特定的表达式匹配字符串找到后并按照给定的字符或者函数进 ...

  9. python年龄阶段划分_Python Pandas中的年龄分组/分类列

    我有一个数据帧,比如df.df有一列'Ages' >>> df['Age'] 我想对这些年龄段进行分组,然后创建一个类似这样的新专栏If age >= 0 & age ...

最新文章

  1. Java基础之随机生成数字和字母
  2. 基于业务解释的特征重要性计算
  3. asp.net core 使用 signalR(一)
  4. 天天讲路由,那 Linux 路由到底咋实现的!?
  5. CPU 可以跑多快?地球到火星的距离告诉你!
  6. jquery将html转换word,HTML代码转word!亲测!可用!!!
  7. java jwindow 键盘_各位老哥求救,JWINDOW无法接收到键盘监听
  8. java返回泛型_Java泛型从泛型方法返回持有者对象
  9. python如何读取文本_python怎么读取文本文件
  10. 投毒、伪装、攻击,DNS 欺骗和钓鱼网站如何一步步诱人掉入陷阱?
  11. 安卓开发大全、系列文章、精品教程
  12. php 字符串固定长度,不够补充其他字符串
  13. 西瓜书笔记16-2:逆强化学习
  14. 成都拉升12名,长沙提升3位,最新全球城市排名出炉
  15. 使用Spring Boot + Resilience 4j实现断路器
  16. visio设置图片默认大小_学习PS第6课(图片大小设置)
  17. 瘦客户机、Windows终端和NC的差别
  18. 35岁以上的Android开发,都去了哪儿?,kotlin编程语言
  19. 如何给计算机硬盘加密上锁,一招教你如何给磁盘加密,保护自己隐私人人有责!-电脑怎么上锁...
  20. input js获取焦点

热门文章

  1. 数据结构与算法分析----八大排序(暂时缺少堆排序)
  2. Mybatis之批量更新数据(批量update)
  3. 【开发工具】C/C++开发者必不可少的15款编译器+IDE
  4. Mac Android 合作,干货:这个秘籍让笔记本同时拥有(mac/win/Android)系统
  5. SMETA验厂辅导,用工场所须在审核前提供最新和精确的预审核和自我评估信息
  6. 滴水藏海,以文为镜!
  7. str[]与*str的区别
  8. 论ICT技术与数据中心的关系
  9. 优矩互动通过聆讯,靠抖音、京东养活的流量生意“二道贩子”?
  10. 卷积神经网络的深入理解-基础篇(卷积,激活,池化,误差反传)