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 07 Python
python实现划词翻译
Apr 23 Python
Python Tkinter基础控件用法
Sep 03 Python
python通过wxPython打开一个音频文件并播放的方法
Mar 25 Python
Djang中静态文件配置方法
Jul 30 Python
使用Python搭建虚拟环境的配置方法
Feb 28 Python
python中format()函数的简单使用教程
Mar 14 Python
Python爬虫之网页图片抓取的方法
Jul 16 Python
彻底理解Python中的yield关键字
Apr 01 Python
pyqt 多窗口之间的相互调用方法
Jun 19 Python
Django ORM 聚合查询和分组查询实现详解
Aug 09 Python
如何基于python操作json文件获取内容
Dec 24 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
destoon实现首页显示供应、企业、资讯条数的方法
2014/07/15 PHP
php实现的简单日志写入函数
2015/03/31 PHP
php+ajax制作无刷新留言板
2015/10/27 PHP
基于jquery的回到页面顶部按钮
2011/06/27 Javascript
JQUERY实现左侧TIPS滑进滑出效果示例
2013/06/27 Javascript
将字符串中由空格隔开的每个单词首字母大写
2014/04/06 Javascript
常用的jQuery前端技巧收集
2014/12/24 Javascript
基于JS实现密码框(password)中显示文字提示功能代码
2016/05/27 Javascript
jQuery 实现ajax传入参数含有特殊字符的方法总结
2016/10/17 Javascript
使用Javascript监控前端相关数据的代码
2016/10/27 Javascript
jquery实现转盘抽奖功能
2017/01/06 Javascript
JavaScript使用原型和原型链实现对象继承的方法详解
2017/04/05 Javascript
vue组件传递对象中实现单向绑定的示例
2018/02/28 Javascript
Angular服务Request异步请求的实例讲解
2018/08/13 Javascript
微信小程序使用map组件实现检索(定位位置)周边的POI功能示例
2019/01/23 Javascript
Vue + Element UI图片上传控件使用详解
2019/08/20 Javascript
[01:45]绝对公平!DOTA2队长征召模式详解
2014/04/25 DOTA
Python基于pygame模块播放MP3的方法示例
2017/09/30 Python
python实现学生管理系统
2018/01/11 Python
python读取excel指定列数据并写入到新的excel方法
2018/07/10 Python
python数据归一化及三种方法详解
2019/08/06 Python
python openvc 裁剪、剪切图片 提取图片的行和列
2019/09/19 Python
python做接口测试的必要性
2019/11/20 Python
python global和nonlocal用法解析
2020/02/03 Python
Python 中的pygame安装与配置教程详解
2020/02/10 Python
python爬虫开发之Request模块从安装到详细使用方法与实例全解
2020/03/09 Python
Office DEPOT法国官网:欧迪办公用品采购
2018/01/03 全球购物
python re模块和正则表达式
2021/03/24 Python
毕业自我评价范文
2013/11/17 职场文书
计算机软件个人的自荐信范文
2013/12/01 职场文书
诚信考试承诺书范文
2015/04/29 职场文书
浅谈redis缓存在项目中的使用
2021/05/20 Redis
JavaScript实现登录窗体
2021/06/22 Javascript
Python Pandas模块实现数据的统计分析的方法
2021/06/24 Python
图文详解Nginx版本平滑升级方案
2021/09/15 Servers
详解Vue slot插槽
2021/11/20 Vue.js