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实现的一只从百度开始不断搜索的小爬虫
Aug 13 Python
python分割和拼接字符串
Nov 01 Python
python处理文本文件实现生成指定格式文件的方法
Jul 31 Python
在Python中marshal对象序列化的相关知识
Jul 01 Python
浅谈Python处理PDF的方法
Nov 10 Python
Flask解决跨域的问题示例代码
Feb 12 Python
Django 浅谈根据配置生成SQL语句的问题
May 29 Python
python处理DICOM并计算三维模型体积
Feb 26 Python
使用TensorFlow实现简单线性回归模型
Jul 19 Python
Python 实现自动获取种子磁力链接方式
Jan 16 Python
keras分类模型中的输入数据与标签的维度实例
Jul 03 Python
PyTorch 实现L2正则化以及Dropout的操作
May 27 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 Pear 安装及使用
2009/03/19 PHP
PHP获取表单textarea数据中的换行问题
2010/09/10 PHP
php htmlentities()函数的定义和用法
2016/05/13 PHP
Prototype PeriodicalExecuter对象 学习
2009/07/19 Javascript
jQuery对象[0]是什么含义?
2010/07/31 Javascript
原生JavaScript实现连连看游戏(附源码)
2013/11/05 Javascript
js实现图片拖动改变顺序附图
2014/05/13 Javascript
优化RequireJS项目的相关技巧总结
2015/07/01 Javascript
jquery不常用方法汇总
2015/07/26 Javascript
实例详解jQuery结合GridView控件的使用方法
2016/01/04 Javascript
jQuery的内容过滤选择器学习教程
2016/04/18 Javascript
巧用数组制作图片切换js代码
2016/11/29 Javascript
Angularjs Promise实例详解
2018/03/15 Javascript
layui点击按钮添加可编辑的一行方法
2018/08/15 Javascript
Vue 实现前端权限控制的示例代码
2019/07/09 Javascript
vue使用require.context实现动态注册路由
2020/12/25 Vue.js
python logging类库使用例子
2014/11/22 Python
python存储16bit和32bit图像的实例
2018/12/05 Python
python3读取图片并灰度化图片的四种方法(OpenCV、PIL.Image、TensorFlow方法)总结
2019/07/04 Python
Python使用sklearn实现的各种回归算法示例
2019/07/04 Python
ORM Django 终端打印 SQL 语句实现解析
2019/08/09 Python
python+requests实现接口测试的完整步骤
2020/10/27 Python
python 解决Windows平台上路径有空格的问题
2020/11/10 Python
css3中的calc函数浅析
2018/07/10 HTML / CSS
如何使用html5与css3完成google涂鸦动画
2012/12/16 HTML / CSS
用HTML5制作视频拼图的教程
2015/05/13 HTML / CSS
家用个人磨皮机:Trophy Skin
2017/03/30 全球购物
Yves Rocher伊夫·黎雪美国官网:法国始创植物美肌1959
2019/01/09 全球购物
大专应届生个人的自我评价
2013/11/21 职场文书
关于母亲节的感言
2014/02/04 职场文书
八年级语文教学反思
2014/02/11 职场文书
美术第二课堂活动总结
2014/07/08 职场文书
mysql多表查询-笔记七
2021/04/05 MySQL
Python中tkinter的用户登录管理的实现
2021/04/22 Python
MySql 缓存查询原理与缓存监控和索引监控介绍
2021/07/02 MySQL
MySQL中的全表扫描和索引树扫描
2022/05/15 MySQL