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编写暴力破解FTP密码小工具
Nov 19 Python
Python之os操作方法(详解)
Jun 15 Python
使用python实现接口的方法
Jul 07 Python
Python 12306抢火车票脚本
Feb 07 Python
python pandas实现excel转为html格式的方法
Oct 23 Python
在pandas多重索引multiIndex中选定指定索引的行方法
Nov 16 Python
python3获取url文件大小示例代码
Sep 18 Python
tf.concat中axis的含义与使用详解
Feb 07 Python
Python键鼠操作自动化库PyAutoGUI简介(小结)
May 17 Python
用Python进行websocket接口测试
Oct 16 Python
Python requests HTTP验证登录实现流程
Nov 05 Python
python中Pexpect的工作流程实例讲解
Mar 02 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脚本代码
2011/02/19 PHP
图片自动缩小的js代码,用以防止图片撑破页面
2007/03/12 Javascript
JavaScript this 深入理解
2009/07/30 Javascript
JavaScript中json对象和string对象之间相互转化
2012/12/26 Javascript
javascript实例--教你实现扑克牌洗牌功能
2014/05/15 Javascript
Node.js node-schedule定时任务隔多少分钟执行一次的方法
2015/02/10 Javascript
JS实现动态给图片添加边框的方法
2015/04/01 Javascript
两种JavaScript的AES加密方式(可与Java相互加解密)
2016/08/02 Javascript
bootstrap table小案例
2016/10/21 Javascript
微信小程序 swiper制作tab切换实现附源码
2017/01/21 Javascript
JavaScript获取ul中li个数的方法
2017/02/13 Javascript
js实现登录框鼠标拖拽效果
2017/03/09 Javascript
JavaScript数据类型的存储方法详解
2017/08/25 Javascript
node.js实现的装饰者模式示例
2017/09/06 Javascript
node实现基于token的身份验证
2018/04/09 Javascript
JavaScript跳出循环的三种方法(break, return, continue)
2019/07/30 Javascript
vue实现tab栏点击高亮效果
2020/08/19 Javascript
Openlayers学习之加载鹰眼控件
2020/09/28 Javascript
[02:27]2014DOTA2国际邀请赛 VG赛后采访:更大的挑战在等着我们
2014/07/13 DOTA
python的xpath获取div标签内html内容,实现innerhtml功能的方法
2019/01/02 Python
python 定义类时,实现内部方法的互相调用
2019/12/25 Python
python GUI库图形界面开发之PyQt5结合Qt Designer创建信号与槽的详细方法与实例
2020/03/08 Python
Python PyQt5整理介绍
2020/04/01 Python
如何在Anaconda中打开python自带idle
2020/09/21 Python
python 决策树算法的实现
2020/10/09 Python
python实现企业微信定时发送文本消息的实例代码
2020/11/25 Python
卡骆驰新加坡官网:Crocs新加坡
2018/06/12 全球购物
德国电子产品购物网站:TechInTheBasket德国
2018/12/07 全球购物
什么样的创业计划书可行性高?
2014/02/01 职场文书
《草虫的村落》教学反思
2014/02/16 职场文书
销售员态度差检讨书
2014/10/26 职场文书
财政局个人年终总结
2015/03/03 职场文书
专家推荐信怎么写
2015/03/25 职场文书
Win11怎么进入安全模式?Windows 11进入安全模式的方法
2021/11/21 数码科技
Python实现文字pdf转换图片pdf效果
2022/04/03 Python
SQL中去除重复数据的几种方法汇总(窗口函数对数据去重)
2023/05/08 MySQL