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找出文件中使用率最高的汉字实例详解
Jun 03 Python
在Django框架中设置语言偏好的教程
Jul 27 Python
利用Python开发实现简单的记事本
Nov 15 Python
Python语言生成水仙花数代码示例
Dec 18 Python
机器学习经典算法-logistic回归代码详解
Dec 22 Python
python删除本地夹里重复文件的方法
Nov 19 Python
Python实现获取本地及远程图片大小的方法示例
Jul 21 Python
在win10和linux上分别安装Python虚拟环境的方法步骤
May 09 Python
Python中Subprocess的不同函数解析
Dec 10 Python
在python3中使用shuffle函数要注意的地方
Feb 28 Python
Keras框架中的epoch、bacth、batch size、iteration使用介绍
Jun 10 Python
忆童年!用Python实现愤怒的小鸟游戏
Jun 07 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
Yii把CGridView文本框换成下拉框的方法
2014/12/03 PHP
微信 开发生成带参数的二维码的实例
2016/11/23 PHP
PHP+Oracle本地开发环境搭建方法详解
2019/04/01 PHP
PHP swoole和redis异步任务实现方法分析
2019/08/12 PHP
php ActiveMQ的安装与使用方法图文教程
2020/02/23 PHP
利用百度地图JSAPI生成h7n9禽流感分布图实现代码
2013/04/15 Javascript
checkbox设置复选框的只读效果不让用户勾选
2013/08/12 Javascript
iframe里面的元素触发父窗口元素事件的jquery代码
2014/10/19 Javascript
信息页文内画中画广告js实现代码(文中加载广告方式)
2016/01/03 Javascript
jQuery结合jQuery.cookie.js插件实现换肤功能示例
2017/10/14 jQuery
nodejs express配置自签名https服务器的方法
2018/05/22 NodeJs
vue.js 实现点击展开收起动画效果
2018/07/07 Javascript
python用字典统计单词或汉字词个数示例
2014/04/22 Python
从零学Python之入门(五)缩进和选择
2014/05/27 Python
python计算auc指标实例
2017/07/13 Python
分析Python中解析构建数据知识
2018/01/20 Python
Python生成MD5值的两种方法实例分析
2019/04/26 Python
使用python判断jpeg图片的完整性实例
2019/06/10 Python
用Python爬取QQ音乐评论并制成词云图的实例
2019/08/24 Python
pymysql 开启调试模式的实现
2019/09/24 Python
python3-flask-3将信息写入日志的实操方法
2019/11/12 Python
python 变量初始化空列表的例子
2019/11/28 Python
基于python代码批量处理图片resize
2020/06/04 Python
HTML5 input新增type属性color颜色拾取器的实例代码
2018/08/27 HTML / CSS
澳大利亚家具和家居用品在线:BROSA
2017/11/02 全球购物
西班牙在线光学:Visual-Click
2020/06/22 全球购物
求高于平均分的学生学号及成绩
2016/09/01 面试题
介绍一下EJB的分类及其各自的功能及应用
2016/08/23 面试题
装饰活动策划方案
2014/02/11 职场文书
小学开学典礼主持词
2014/03/19 职场文书
出纳担保书范文
2014/04/02 职场文书
《画家乡》教学反思
2014/04/22 职场文书
副乡长民主生活会个人对照检查材料思想汇报
2014/10/01 职场文书
2014年后备干部工作总结
2014/12/08 职场文书
北京故宫的导游词
2015/01/31 职场文书
周末问候语大全
2015/11/10 职场文书