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中用Descriptor实现类级属性(Property)详解
Sep 18 Python
Python中使用md5sum检查目录中相同文件代码分享
Feb 02 Python
Python2中的raw_input() 与 input()
Jun 12 Python
Python cookbook(数据结构与算法)找出序列中出现次数最多的元素算法示例
Mar 15 Python
Python入门学习指南分享
Apr 11 Python
对python中的 os.mkdir和os.mkdirs详解
Oct 16 Python
Scrapy使用的基本流程与实例讲解
Oct 21 Python
Python采集猫眼两万条数据 对《无名之辈》影评进行分析
Dec 05 Python
在Python中通过getattr获取对象引用的方法
Jan 21 Python
基于python 等频分箱qcut问题的解决
Mar 03 Python
python利用opencv保存、播放视频
Nov 02 Python
python图像处理 PIL Image操作实例
Apr 09 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
使用PHPCMS搭建wap手机网站
2015/09/20 PHP
PHP下使用mysqli的函数连接mysql出现warning: mysqli::real_connect(): (hy000/1040): ...
2016/02/14 PHP
PHP实现创建微信自定义菜单的方法示例
2017/07/14 PHP
为javascript添加String.Format方法
2020/08/11 Javascript
Jquery ajax传递复杂参数给WebService的实现代码
2011/08/08 Javascript
Event altKey,ctrlKey,shiftKey属性解析
2013/12/18 Javascript
jQuery.lazyload+masonry改良图片瀑布流代码
2014/06/20 Javascript
JS实现判断碰撞的方法
2015/02/11 Javascript
jQuery实现在下拉列表选择时获取json数据的方法
2015/04/16 Javascript
使用jQuery操作HTML的table表格的实例解析
2016/03/13 Javascript
Js+Ajax,Get和Post在使用上的区别小结
2016/06/08 Javascript
JS实现css hover操作的方法示例
2017/04/07 Javascript
angularJS 发起$http.post和$http.get请求的实现方法
2017/05/18 Javascript
EasyUI中的dataGrid的行内编辑
2017/06/22 Javascript
jQuery实现checkbox即点即改批量删除及中间遇到的坑
2017/11/11 jQuery
移动端(微信等使用vConsole调试console的方法
2019/03/05 Javascript
对Layer弹窗使用及返回数据接收的实例详解
2019/09/26 Javascript
Vue项目打包压缩的实现(让页面更快响应)
2020/03/10 Javascript
Python 学习笔记
2008/12/27 Python
python 从远程服务器下载日志文件的程序
2013/02/10 Python
python使用tcp实现局域网内文件传输
2020/03/20 Python
Django框架使用富文本编辑器Uedit的方法分析
2018/07/31 Python
Python学习笔记之lambda表达式用法详解
2019/08/08 Python
Python+OpenCv制作证件图片生成器的操作方法
2019/08/21 Python
经典c++面试题三
2015/07/08 面试题
本科生学习总结的自我评价
2013/10/02 职场文书
校园招聘策划书
2014/01/09 职场文书
水利学院求职自荐书
2014/02/01 职场文书
超市总经理岗位职责
2014/02/02 职场文书
股票投资建议书
2014/05/19 职场文书
优秀党员先进材料
2014/12/18 职场文书
酒店辞职书怎么写
2015/02/26 职场文书
2015夏季作息时间调整通知
2015/04/24 职场文书
预备党员群众意见
2015/06/01 职场文书
2015年高三年级组工作总结
2015/07/21 职场文书
重阳节主题班会
2015/08/17 职场文书