pandas ix &iloc &loc的区别


Posted in Python onJanuary 10, 2019

一开始自学Python的numpy、pandas时候,索引和切片把我都给弄晕了,特别是numpy的切片索引、布尔索引和花式索引,简直就是大乱斗。但是最近由于版本的问题,从之前的Python2.7改用Python3.6 了,在3.6中提供了loc和iloc两种索引方法,把ix这个方法给划分开来了,所以很有必要做个总结和对比。

  • loc——通过行标签索引行数据
  • iloc——通过行号索引行数据
  • ix——通过行标签或者行号索引行数据(基于loc和iloc 的混合)

同理,索引列数据也是如此!

举例说明:

1、分别使用loc、iloc、ix 索引第一行的数据:

(1)loc

import pandas as pd
data=[[1,2,3],[4,5,6]]
index=['a','b']#行号
columns=['c','d','e']#列号
df=pd.DataFrame(data,index=index,columns=columns)#生成一个数据框

#print df.loc['a']
'''
c  1
d  2
e  3
'''

print df.loc[0]
#这个就会出现错误
'''
TypeError: cannot do label indexing on <class 'pandas.indexes.base.Index'> 
with these indexers [1] of <type 'int'>
'''

(2)iloc

import pandas as pd
data=[[1,2,3],[4,5,6]]
index=['a','b']#行号
columns=['c','d','e']#列号
df=pd.DataFrame(data,index=index,columns=columns)#生成一个数据框

print df.iloc[0]
'''
c  1
d  2
e  3
'''
print df.iloc['a']
'''
TypeError: cannot do positional indexing on <class 'pandas.indexes.base.Index'> 
with these indexers [a] of <type 'str'>
'''

(3)ix

import pandas as pd
data=[[1,2,3],[4,5,6]]
index=['a','b']#行号
columns=['c','d','e']#列号
df=pd.DataFrame(data,index=index,columns=columns)#生成一个数据框

print df.ix[0]
'''
c  1
d  2
e  3
'''
print df.ix['a']
'''
c  1
d  2
e  3
'''

2、分别使用loc、iloc、ix 索引第一列的数据:

import pandas as pd
data=[[1,2,3],[4,5,6]]
index=['a','b']#行号
columns=['c','d','e']#列号
df=pd.DataFrame(data,index=index,columns=columns)#生成一个数据框

print df.loc[:,['c']]

print df.iloc[:,[0]]

print df.ix[:,['c']]

print df.ix[:,[0]]
#结果都为
'''
  c
a 1
b 4
'''

3、分别使用loc、iloc、ix 索引多行的数据:

import pandas as pd
data=[[1,2,3],[4,5,6]]
index=['a','b']#行号
columns=['c','d','e']#列号
df=pd.DataFrame(data,index=index,columns=columns)#生成一个数据框

print df.loc['a':'b']

print df.iloc[0:1]

print df.ix['a':'b']

print df.ix[0:1]
#结果都为
'''
  c d e
a 1 2 3
b 4 5 6
'''

4、分别使用loc、iloc、ix 索引多列的数据:

import pandas as pd
data=[[1,2,3],[4,5,6]]
index=['a','b']#行号
columns=['c','d','e']#列号
df=pd.DataFrame(data,index=index,columns=columns)#生成一个数据框

print df.loc[:,'c':'d']

print df.iloc[:,0:2]

print df.ix[:,'c':'d']

print df.ix[:,0:2]
#结果都为
'''
  c d
a 1 2
b 4 5
'''

5、loc、iloc、ix使用切片的区别

loc、iloc、ix对于切片的索引数据就两种情况,按照标签切片索引和按照位置编号切片索引

In [20]: df.loc['ind0':'ind3']
Out[20]: 
   col0 col1 col2 col3 col4
ind0   0   1   2   3   4
ind1   5   6   7   8   9
ind2  10  11  12  13  14
ind3  15  16  17  18  19

In [21]: df.iloc[0:3]
Out[21]: 
   col0 col1 col2 col3 col4
ind0   0   1   2   3   4
ind1   5   6   7   8   9
ind2  10  11  12  13  14

区别不在于用哪种方法,而是通过标签索引将会将切片末端包含进去,通过位置编号索引不会讲切片末端包含进去。同样的都是第一行到第四行,通过loc就会把1,2,3,4行都提取出来,通过iloc就只能把1,2,3行提取出来。ix方法也是一样,知识方法不同而已。

In [23]: df.ix['ind0':'ind3']
Out[23]: 
   col0 col1 col2 col3 col4
ind0   0   1   2   3   4
ind1   5   6   7   8   9
ind2  10  11  12  13  14
ind3  15  16  17  18  19

In [24]: df.ix[0:3]
Out[24]: 
   col0 col1 col2 col3 col4
ind0   0   1   2   3   4
ind1   5   6   7   8   9
ind2  10  11  12  13  14

 对于列的切片跟行的一样。

这里讨论了基本的索引和切片,如果有用词不当的地方请提出来,我将积极改正,或者有其他有关花式索引、布尔索引的问题也可以大家一起讨论讨论!

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python greenlet实现原理和使用示例
Sep 24 Python
跟老齐学Python之有容乃大的list(4)
Sep 28 Python
python创建进程fork用法
Jun 04 Python
详谈python http长连接客户端
Jun 12 Python
使用python 3实现发送邮件功能
Jun 15 Python
Pycharm无法使用已经安装Selenium的解决方法
Oct 13 Python
对python实时得到鼠标位置的示例讲解
Oct 14 Python
Python异常的检测和处理方法
Oct 26 Python
python使用response.read()接收json数据的实例
Dec 19 Python
用Python从0开始实现一个中文拼音输入法的思路详解
Jul 20 Python
python json.dumps中文乱码问题解决
Apr 01 Python
python爬虫筛选工作实例讲解
Nov 23 Python
python 移动图片到另外一个文件夹的实例
Jan 10 #Python
python将处理好的图像保存到指定目录下的方法
Jan 10 #Python
对python PLT中的image和skimage处理图片方法详解
Jan 10 #Python
python pandas库的安装和创建
Jan 10 #Python
Python绘制并保存指定大小图像的方法
Jan 10 #Python
解决Python plt.savefig 保存图片时一片空白的问题
Jan 10 #Python
Python使用pydub库对mp3与wav格式进行互转的方法
Jan 10 #Python
You might like
php foreach正序倒序输出示例代码
2014/07/01 PHP
php模拟用户自动在qq空间发表文章的方法
2015/01/07 PHP
PHP面试题之文件目录操作
2015/10/15 PHP
jquery 1.3.2 IE8中的一点点的小问题解决方法
2009/07/10 Javascript
javaScript面向对象继承方法经典实现
2013/08/20 Javascript
简介JavaScript中的unshift()方法的使用
2015/06/09 Javascript
JavaScript实现获得所有兄弟节点的方法
2015/07/23 Javascript
很棒的Bootstrap选项卡切换效果
2016/07/01 Javascript
[原创]jQuery常用的4种加载方式分析
2016/07/25 Javascript
关于javascript中限定时间内防止按钮重复点击的思路详解
2016/08/16 Javascript
微信小程序 数据绑定详解及实例
2016/10/25 Javascript
AngularJS过滤器filter用法分析
2016/12/11 Javascript
JavaScript实现单例模式实例分享
2017/12/22 Javascript
Postman模拟发送带token的请求方法
2018/03/31 Javascript
使用electron制作满屏心特效的示例代码
2018/11/27 Javascript
Node.js API详解之 readline模块用法详解
2020/05/22 Javascript
[53:21]2014 DOTA2国际邀请赛中国区预选赛5.21 DT VS LGD-CDEC
2014/05/22 DOTA
[01:01:43]EG vs VP 2018国际邀请赛淘汰赛BO3 第二场 8.24
2018/08/25 DOTA
Python中的类学习笔记
2014/09/23 Python
一些Centos Python 生产环境的部署命令(推荐)
2018/05/07 Python
Python之列表的插入&amp;替换修改方法
2018/06/28 Python
python多线程调用exit无法退出的解决方法
2019/02/18 Python
Django时区详解
2019/07/24 Python
解决Python计算矩阵乘向量,矩阵乘实数的一些小错误
2019/08/26 Python
Django vue前后端分离整合过程解析
2020/11/20 Python
matplotlib交互式数据光标mpldatacursor的实现
2021/02/03 Python
html5+svg学习指南之SVG基础知识
2014/12/17 HTML / CSS
阿联酋彩妆品牌:OUD MILANO
2019/10/06 全球购物
TCP/IP中的TCP和IP分别承担什么责任
2012/04/21 面试题
小学生民族团结演讲稿
2014/08/27 职场文书
领导班子作风建设剖析材料
2014/10/11 职场文书
云台山导游词
2015/02/03 职场文书
复活读书笔记
2015/06/29 职场文书
适合青年人白手起家的创业项目分享
2019/08/16 职场文书
Redis基于Bitmap实现用户签到功能
2021/06/20 Redis
笔记本自带的win11如何跳过联网激活?
2022/04/20 数码科技