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获取android设备的GPS信息脚本分享
Mar 06 Python
Python使用xlrd读取Excel格式文件的方法
Mar 10 Python
Python教程之全局变量用法
Jun 27 Python
python脚本实现数据导出excel格式的简单方法(推荐)
Dec 30 Python
Python实现通讯录功能
Feb 22 Python
Python迭代器定义与简单用法分析
Apr 30 Python
python selenium自动上传有赞单号的操作方法
Jul 05 Python
在Python中输入一个以空格为间隔的数组方法
Nov 13 Python
学习python可以干什么
Feb 26 Python
OpenCV+Python3.5 简易手势识别的实现
Dec 21 Python
使paramiko库执行命令时在给定的时间强制退出功能的实现
Mar 03 Python
python字符串拼接.join()和拆分.split()详解
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 session应用实例 登录验证
2009/03/16 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(五)
2014/06/23 PHP
浅谈PHP中的
2016/04/23 PHP
cnblogs TagCloud基于jquery的实现代码
2010/06/11 Javascript
jQuery 表单验证扩展(四)
2010/10/20 Javascript
juqery 学习之六 CSS--css、位置、宽高
2011/02/11 Javascript
解决JS浮点数运算出现Bug的方法
2013/03/12 Javascript
关于div自适应高度/左右高度自适应一致的js代码
2013/03/22 Javascript
JavaScript中计算网页中某个元素的位置
2015/06/10 Javascript
程序员必知35个jQuery 代码片段
2015/11/05 Javascript
基于javascript实现tab切换特效
2016/03/29 Javascript
javascript 实现动态侧边栏实例详解
2016/11/11 Javascript
详解前后端分离之VueJS前端
2017/05/24 Javascript
prototype.js简单实现ajax功能示例
2017/10/18 Javascript
4个顶级JavaScript高级文本编辑器
2018/10/10 Javascript
vue 实现左右拖拽元素并且不超过他的父元素的宽度
2018/11/30 Javascript
微信小程序缓存支持二次开发封装实现解析
2019/12/16 Javascript
jQuery实现鼠标滑动切换图片
2020/05/27 jQuery
进一步探究Python的装饰器的运用
2015/05/05 Python
Python批量按比例缩小图片脚本分享
2015/05/21 Python
Python减少循环层次和缩进的技巧分析
2016/03/15 Python
TensorFLow用Saver保存和恢复变量
2018/03/10 Python
解决pycharm 误删掉项目文件的处理方法
2018/10/22 Python
python实现最大子序和(分治+动态规划)
2019/07/05 Python
使用IDLE的Python shell窗口实例详解
2019/11/19 Python
在pytorch中对非叶节点的变量计算梯度实例
2020/01/10 Python
python实现对变位词的判断方法
2020/04/05 Python
Django自带的用户验证系统实现
2020/12/18 Python
法人授权委托书范本
2014/04/04 职场文书
师恩难忘教学反思
2014/04/27 职场文书
大学生党员学习焦裕禄精神思想汇报
2014/09/10 职场文书
民主评议政风行风整改方案
2014/09/17 职场文书
pytorch显存一直变大的解决方案
2021/04/08 Python
Windows安装Anaconda3的方法及使用过程详解
2021/06/11 Python
分享Python获取本机IP地址的几种方法
2022/03/17 Python
python数字图像处理之图像的批量处理
2022/06/28 Python