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编写的微博应用
Oct 17 Python
详解MySQL数据类型int(M)中M的含义
Nov 20 Python
python3.5 + PyQt5 +Eric6 实现的一个计算器代码
Mar 11 Python
对python requests的content和text方法的区别详解
Oct 11 Python
用python打印菱形的实操方法和代码
Jun 25 Python
python写程序统计词频的方法
Jul 29 Python
Python数据处理篇之Sympy系列(五)---解方程
Oct 12 Python
Python动态强类型解释型语言原理解析
Mar 25 Python
python为什么会环境变量设置不成功
Jun 23 Python
python中字符串的编码与解码详析
Dec 03 Python
Selenium环境变量配置(火狐浏览器)及验证实现
Dec 07 Python
使用Python+OpenCV进行卡类型及16位卡号数字的OCR功能
Aug 30 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禁止个别IP访问网站
2013/10/30 PHP
PHP之APC缓存详细介绍 apc模块安装
2014/01/13 PHP
PHP时间日期增减操作示例【date strtotime实现加一天、加一月等操作】
2018/12/21 PHP
PHP实现微信公众号验证Token的示例代码
2019/12/16 PHP
jQuery $.each的用法说明
2010/03/22 Javascript
Dom操作之兼容技巧分享
2011/09/20 Javascript
jQuery div层的放大与缩小简单实现代码
2013/03/28 Javascript
JS中判断null、undefined与NaN的方法
2014/03/26 Javascript
jQuery实现径向动画菜单效果
2015/07/17 Javascript
最棒的Angular2表格控件
2016/08/10 Javascript
Vue.js常用指令汇总(v-if、v-for等)
2016/11/03 Javascript
bootstrap常用组件之头部导航实现代码
2017/04/20 Javascript
微信域名检测接口调用演示步骤(含PHP、Python)
2019/12/08 Javascript
JS document文档的简单操作完整示例
2020/01/13 Javascript
vuex入门最详细整理
2020/03/04 Javascript
JavaScript如何实现图片处理与合成
2020/05/29 Javascript
vue+高德地图实现地图搜索及点击定位操作
2020/09/09 Javascript
python dict remove数组删除(del,pop)
2013/03/24 Python
windows下python安装paramiko模块和pycrypto模块(简单三步)
2017/07/06 Python
对python读取CT医学图像的实例详解
2019/01/24 Python
python pandas时序处理相关功能详解
2019/07/03 Python
python3实现弹弹球小游戏
2019/11/25 Python
python中的逆序遍历实例
2019/12/25 Python
Python基于pyjnius库实现访问java类
2020/07/31 Python
详解Python GUI编程之PyQt5入门到实战
2020/12/10 Python
加拿大最大的钻石商店:Peoples Jewellers
2018/01/01 全球购物
bareMinerals官网:矿物质化妆品和护肤品
2018/02/04 全球购物
俄罗斯运动鞋商店:Sneakerhead
2018/05/10 全球购物
2014年乡镇工会工作总结
2014/12/02 职场文书
2015最新婚礼主持词
2015/06/30 职场文书
《七月的天山》教学反思
2016/02/19 职场文书
导游词之青城山景区
2019/09/27 职场文书
sqlserver2017共享功能目录路径不可改的解决方法
2021/04/16 SQL Server
Python代码,能玩30多款童年游戏!这些有几个是你玩过的
2021/04/27 Python
RestTemplate如何通过HTTP Basic Auth认证示例说明
2022/03/17 Java/Android
Golang 链表的学习和使用
2022/04/19 Golang