详解pandas中利用DataFrame对象的.loc[]、.iloc[]方法抽取数据


Posted in Python onDecember 13, 2020

pandas的DataFrame对象,本质上是二维矩阵,跟常规二维矩阵的差别在于前者额外指定了每一行和每一列的名称。这样内部数据抽取既可以用“行列名称(对应.loc[]方法)”,也可以用“矩阵下标(对应.iloc[]方法)”两种方式进行。
下面具体说明:

(以下程序均在Jupyter notebook中进行,部分语句的print()函数省略)

首先生成一个DataFrame对象:

import pandas as pd
score = [[34,67,87],[68,98,58],[75,73,86],[94,59,81]]
name = ['小明','小红','小李']
course = ['语文','数学','英语','政治']
mydata1 = pd.DataFrame(data=score,columns=name,index=course)#指定行名(index)和列名(columns)
print(mydata1)
mydata2 = pd.DataFrame(score)#不指定行列名,默认使用0,1,2……
print(mydata2)
#指定行列名
  小明 小红 小李
语文 34 67 87
数学 68 98 58
英语 75 73 86
政治 94 59 81
#采用默认行列名
  0  1  2 (默认列名)
0 34 67 87
1 68 98 58
2 75 73 86
3 94 59 81

DataFrame对象生成时除了必须指定data参数外,用户还可以指定两个参数columns(列名)和index(行名,注意这里的index不仅可以是数字,也可以是用户指定的任何数据类型,如字母),如果不指定,则行列名默认都采用0、1、2……。

下图说明了前面的情况:

详解pandas中利用DataFrame对象的.loc[]、.iloc[]方法抽取数据

DataFrame对象的.loc[]和.iloc[]方法都可用于抽取数据,区别是:

  • .loc[]:是location,以columns(列名)和index(行名)作为参数。
  • .iloc[]:是index location,以二维矩阵的位置指标(即0,1,2……)作为参数。

.loc[]语法

.loc[行标签名/[行标签名list],列标签名/[列标签名list]],即有两个输入参数,第一个指定行名,第二个指定列名。当只有一个参数时,默认是行名(即抽取整行),所有列都选中。

.iloc[]语法

.loc[行位置/[行位置list],列位置/[列位置list]],也有两个输入参数,第一个指定行位置,第二个指定列位置。当只有一个参数时,默认是行位置(即抽取整行),所有列都选中。

例1.抽取1行数据

#以下用.loc[]抽取1行名为‘语文'的数据(包括所有列)
mydata1.loc['语文']
mydata1.loc['语文',]
mydata1.loc['语文',:]
mydata1.loc[['语文'],]
mydata1.loc[['语文'],:]
#以下用.iloc[]抽取1行名为‘语文'的数据(包括所有列)
mydata1.iloc[0]
mydata1.iloc[0,]
mydata1.iloc[0,:]
mydata1.iloc[[0],]
mydata1.iloc[[0],:]

#输出方式1(第1个参数无[],这是一个Series对象):
小明  34
小红  67
小李  87
Name: 语文, dtype: int64
#输出方式2(第1个参数有[],这是一个DataFrame对象):
  小明 小红 小李
语文 34 67 87
Name: 语文, dtype: int64

上述.loc[]和.iloc[]都只接收了1个参数“语文”或者“0”,因此默认都表示行信息,而列则全部被选中,即抽取'语文'这整一行数据。','表示将两个参数隔开(如果有两个参数的话),':'这里表示选择中所有列。当只有一个输入参数时,python默认','和':'既可写上也可省略。注意:参数['语文']或[0]中只有一个对象时(即只有一行),[]也可以省略,如果有多个对象(即多行)则必须加上[]。此外还需注意,加上[]表示抽取的结果无论是一个数据,一行数据,还是一列数据,他都是DataFrame对象;不加[]时,如果选中的是一行或者一列数据,则是Series对象,如果是一个单独的数据,则是该数据本身的类型。

例2.指定行名抽取任意多行数据

#指定多行行名抽取
mydata1.loc[['英语','语文','政治'],:]
  小明 小红 小李
英语 75 73 86
语文 34 67 87
政治 94 59 81
mydata1.iloc[[1,0],:]
  小明 小红 小李
数学 68 98 58
语文 34 67 87

例2和例1唯一的差别是,第一个参数指定了多行一起输出,此时必须用[]将各行名或者下标括起来,否则出错。后面的','和':'同例1,可省略。注意:原始数据的行顺序是:语文、数学、英语、政治,这里的提取顺序是['英语','语文','政治'],而输出也是'英语','语文','政治',可见输出顺序和参数指定顺序是一致的,而非按原始顺序输出。

例3.抽取连续任意多行数据

mydata1.loc['语文':'英语',:] #连续抽取从语文到英语的所有行
  小明 小红 小李
语文 34 67 87
数学 68 98 58
英语 75 73 86

mydata1.loc[:'英语',:] #连续抽取从第1行到英语的所有行
  小明 小红 小李
语文 34 67 87
数学 68 98 58
英语 75 73 86

mydata1.iloc[0:3,:] #连续抽取1~3行
  小明 小红 小李
语文 34 67 87
数学 68 98 58
英语 75 73 86

mydata1.iloc[1:,:] #连续抽取第2行最后一行
  小明 小红 小李
数学 68 98 58
英语 75 73 86
政治 94 59 81

例3依然是接受1个参数,列参数没有,后面的','和':'同例1,可省略。连续参数用‘start:end'的方式指定行范围。注意:这里不能用[]将其括起来,否则出错。此外用行列名连续取值时,比如['语文':'政治']会把'政治'所在行也取出来,而利用矩阵下标时,0:3只取0,1,2对应的三行,最后一行不会取出;但是如果行列标签名本身就是整数0,1,2……,而不是文字或者其他类型,那么在使用连续行列标签名取数据时,最后一行或者列是不会被取出的。

例4.抽取“列”的各种情况

mydata1.loc[:,['小红']] #所有行,小红列,只有一列时,内部[]也可以省略
  小红
语文 67
数学 98
英语 73
政治 59

mydata1.loc[:,['小明','小红']] #所有行,小明和小红两列
  小明 小红
语文 34 67
数学 68 98
英语 75 73
政治 94 59

mydata1.iloc[:,[1,2]] #所有行,第2和第3列
  小红 小李
语文 67 87
数学 98 58
英语 73 86
政治 59 81

mydata1.loc[:,'小明':] #连续抽取从小明列开始到最后一列
  小明 小红 小李
语文 34 67 87
数学 68 98 58
英语 75 73 86
政治 94 59 81

mydata1.iloc[:,:3] #连续抽取从1列开始到第3列
  小明 小红 小李
语文 34 67 87
数学 68 98 58
英语 75 73 86
政治 94 59 81

抽取整列的方式跟抽取整行在参数设置上完全一样。.loc[]和.iloc[]两个方法默认列为第二个参数,因此抽取整列时,都必须带上':,'作为区分前面行参数的‘分隔符',否则出错。

例5.同时抽取指定行和列对应数据

mydata1.loc['语文','小明'] #输入了两个参数,输出语文行小明列,即一个数据
34
<class 'numpy.int64'> #没带[]时,单个数字是这种类型
mydata1.loc[['语文'],['小明']] #输出语文行小明列,即一个数据
  小明
语文 34
<class 'pandas.core.frame.DataFrame'> #带[]时,输出依然是DataFrame对象

mydata1.iloc[1,2] #第2行第3列数据,单个数据
58
<class 'numpy.int64'> #注意没带[]时的输出类型
mydata1.iloc[[1],[2]]
  小李
数学 58
<class 'pandas.core.frame.DataFrame'> #注意带[]时的输出类型

mydata1.loc[['语文','数学'],['小明']] #输出语文数学行,小明列的数据
  小明
语文 34
数学 68

mydata1.iloc[1:,[0,2]] #输出从第2行到最后一行,第1和第3行对应数据
  小明 小李
数学 68 58
英语 75 86
政治 94 81

同时抽取分部行和列的情况,就是把上述单独抽取行和列的方式合并起来用。抽取整个DataFrame对象则是.loc[:,:]或.iloc[:,:],虽然这么做没啥意义。

总结:

(1)DataFrame对象的.loc[,]和.iloc[,]方法用于抽取数据,.loc[,]用行列的标签名作为参数,.iloc[,]用二维矩阵元素的网格下标作为参数。
(2)两个方法都接受两个参数,第一个是“行标签”或者“矩阵行号”,第二个是“列标签”或者“矩阵列号”。
(3)两种方法当只指定一个输入参数时,都默是跟“行”相关,而“列”则全部被选中。如何行和列都需要指定时,中间用“逗号,”隔开,这非常重要,否则出错。
(4)当需要选中所有行的某几列时,行参数可以省略,列参数需要指定,此时列参数前面必须带上“,:”,形如.loc[:,列参数],.iloc[:,列参数]。
(5).loc[,]和.iloc[,]设置了一个还是两个输入参数,关键看有没有“,”将两个参数分开,且要区分逗号是一个参数的内部逗号,还有用于分隔行列参数的逗号。
(6)对于两个参数的概念区分,.loc['语文','数学']这表示输入了两个参数,行参数是‘语文',列参数是‘数学',对于上面的表格而言这是错的,因为没有叫‘数学'的列,应写为[['语文','数学']],即‘数学'也是行参数的一部分,['语文','数学']整体作为一个行参数,这里的逗号不是用以分隔行和列,仅仅是行list里面的逗号。[['语文','数学']]=[['语文','数学'],]=[['语文','数学'],:],都表示只有一个行参数,列全部选中。

到此这篇关于详解pandas中利用DataFrame对象的.loc[]、.iloc[]方法抽取数据的文章就介绍到这了,更多相关pandas .loc[]、.iloc[]抽取数据内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
python通过post提交数据的方法
May 06 Python
Python数据处理numpy.median的实例讲解
Apr 02 Python
Python、 Pycharm、Django安装详细教程(图文)
Apr 12 Python
python简单鼠标自动点击某区域的实例
Jun 25 Python
pygame实现俄罗斯方块游戏(基础篇3)
Oct 29 Python
python如何把字符串类型list转换成list
Feb 18 Python
python爬虫开发之Beautiful Soup模块从安装到详细使用方法与实例
Mar 09 Python
Python中格式化字符串的四种实现
May 26 Python
tensorflow实现残差网络方式(mnist数据集)
May 26 Python
使用keras内置的模型进行图片预测实例
Jun 17 Python
基于python实现图片转字符画代码实例
Sep 04 Python
PYTHON使用Matplotlib去实现各种条形图的绘制
Mar 22 Python
pandas抽取行列数据的几种方法
Dec 13 #Python
python3.9实现pyinstaller打包python文件成exe
Dec 13 #Python
Pandas中两个dataframe的交集和差集的示例代码
Dec 13 #Python
使用pandas实现筛选出指定列值所对应的行
Dec 13 #Python
Pandas DataFrame求差集的示例代码
Dec 13 #Python
pandas实现导出数据的四种方式
Dec 13 #Python
python绘图pyecharts+pandas的使用详解
Dec 13 #Python
You might like
ThinkPHP关联模型操作实例分析
2012/09/23 PHP
仿Aspnetpager的一个PHP分页类代码 附源码下载
2012/10/08 PHP
关于查看MSSQL 数据库 用户每个表 占用的空间大小
2013/06/21 PHP
php中session退出登陆问题
2014/02/27 PHP
Laravel框架表单验证详解
2014/09/04 PHP
php中array_column函数简单实现方法
2016/07/11 PHP
PHP jpgraph库的配置及生成统计图表:折线图、柱状图、饼状图
2017/05/15 PHP
PHP simplexml_load_string()函数实例讲解
2019/02/03 PHP
TypeScript具有的几个不同特质
2015/04/07 Javascript
JavaScript实现节点的删除与序号重建实例
2015/08/05 Javascript
基于Jquery插件Uploadify实现实时显示进度条上传图片
2020/03/26 Javascript
微信小程序 wx.request(OBJECT)发起请求详解
2016/10/13 Javascript
原生JS实现匀速图片轮播动画
2016/10/18 Javascript
Bootstrap导航条的使用和理解3
2016/12/14 Javascript
使用 Node.js 对文本内容分词和关键词抽取
2017/05/27 Javascript
深入理解Vue生命周期、手动挂载及挂载子组件
2017/09/27 Javascript
js中bool值的转换及“&amp;&amp;”、“||”、 “!!”详解
2017/12/21 Javascript
vue下history模式刷新后404错误解决方法
2018/08/18 Javascript
浅谈Vue3.0之前你必须知道的TypeScript实战技巧
2019/09/11 Javascript
django 自定义用户user模型的三种方法
2014/11/18 Python
python查看模块安装位置的方法
2018/10/16 Python
Python 实现子类获取父类的类成员方法
2019/01/11 Python
Pytorch基本变量类型FloatTensor与Variable用法
2020/01/08 Python
Python编程快速上手——疯狂填词程序实现方法分析
2020/02/29 Python
如何在mac下配置python虚拟环境
2020/07/06 Python
Python函数调用追踪实现代码
2020/11/27 Python
python 如何引入协程和原理分析
2020/11/30 Python
澳大利亚拥有最佳跳伞降落点和最好服务的跳伞项目运营商:Skydive Australia
2018/03/05 全球购物
MUGLER官方网站:蒂埃里·穆勒香水
2019/11/26 全球购物
司机岗位职责
2015/02/04 职场文书
通知书大全
2015/04/27 职场文书
预备党员转正党小组意见
2015/06/01 职场文书
小学生安全教育心得体会
2016/01/15 职场文书
《草船借箭》教学反思
2016/02/23 职场文书
为什么 Nginx 比 Apache 更牛逼
2021/03/31 Servers
Node与Python 双向通信的实现代码
2021/07/16 Javascript