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实现求最大公约数及判断素数的方法
May 26 Python
Python实现曲线点抽稀算法的示例
Oct 12 Python
Python实现的堆排序算法原理与用法实例分析
Nov 22 Python
python 中的list和array的不同之处及转换问题
Mar 13 Python
浅谈python中str字符串和unicode对象字符串的拼接问题
Dec 04 Python
Python离线安装PIL 模块的方法
Jan 08 Python
Django学习之文件上传与下载
Oct 06 Python
基于python判断目录或者文件代码实例
Nov 29 Python
Python实现不规则图形填充的思路
Feb 02 Python
pycharm 使用tab跳出正在编辑的括号(){}{}等问题
Feb 26 Python
python自动计算图像数据集的RGB均值
Jun 18 Python
Python 避免字典和元组的多重嵌套问题
Jul 15 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系列学习之日期函数使用介绍
2012/08/18 PHP
yii上传文件或图片实例
2014/04/01 PHP
phpStudy访问速度慢和启动失败的解决办法
2015/11/19 PHP
微信支付开发告警通知实例
2016/07/12 PHP
PHP CURL post数据报错 failed creating formpost data
2016/10/16 PHP
PHP  Yii清理缓存的实现方法
2016/11/10 PHP
javascript attachEvent和addEventListener使用方法
2009/03/19 Javascript
模仿jQuery each函数的链式调用
2009/07/22 Javascript
JqueryMobile动态生成listView并实现刷新的两种方法
2014/03/05 Javascript
jquery 实现两级导航菜单附效果图
2014/03/07 Javascript
悬浮广告方法日常收集整理
2016/03/18 Javascript
Javascript动画效果(4)
2016/10/11 Javascript
浅谈Angular.js中使用$watch监听模型变化
2017/01/10 Javascript
利用iscroll4实现轮播图效果实例代码
2017/01/11 Javascript
微信小程序 ES6Promise.all批量上传文件实现代码
2017/04/14 Javascript
Javascript实现信息滚动效果
2017/05/18 Javascript
微信小程序实现折叠面板
2018/01/31 Javascript
浅谈vue项目可以从哪些方面进行优化
2018/05/05 Javascript
vue 项目 iOS WKWebView 加载
2019/04/17 Javascript
Python和Ruby中each循环引用变量问题(一个隐秘BUG?)
2014/06/04 Python
Python中的赋值、浅拷贝、深拷贝介绍
2015/03/09 Python
用Python制作在地图上模拟瘟疫扩散的Gif图
2015/03/31 Python
Python基于identicon库创建类似Github上用的头像功能
2017/09/25 Python
python生成多个只含0,1元素的随机数组或列表的实例
2018/11/12 Python
Python函数装饰器实现方法详解
2018/12/22 Python
Python把对应格式的csv文件转换成字典类型存储脚本的方法
2019/02/12 Python
python中调试或排错的五种方法示例
2019/09/12 Python
OpenCV 之按位运算举例解析
2020/06/19 Python
基于Tensorflow读取MNIST数据集时网络超时的解决方式
2020/06/22 Python
如何在 Matplotlib 中更改绘图背景的实现
2020/11/26 Python
如何开启linux的ssh服务
2015/02/14 面试题
硅酸盐工业控制专业应届生求职信
2013/11/02 职场文书
大二法学专业职业生涯规划范文
2014/02/12 职场文书
社区学习党的群众路线教育实践活动心得体会
2014/11/03 职场文书
2014年宣传部个人工作总结
2014/12/06 职场文书
python实现简单区块链结构
2021/04/25 Python