【python数据分析基础】—pandas中loc()与iloc()的介绍与区别

2023-09-20 16:16:32


前言

我们经常在寻找数据的某行或者某列的时常用到Pandas中的两种方法iloc和loc,两种方法都接收两个参数,第一个参数是行的范围,第二个参数是列的范围。

一、loc[]函数

  • loc:
    • 接收的是行、列的名称或标签
    • 在切片是按闭区间切片,也就是区间两边都能取到。

二、iloc[]函数

  • iloc:
    • 接收的是行、列的索引位置(下标,从0开始)。
    • 按传统的左闭右开的的方式切片。

三、详细用法

创建用于测试的数据表dataframe:

import pandas as pd
data={'state':['Ohio','Ohio','Ohio','Nevada','Nevada'],
      'year':[2000,2001,2002,2001,2002],
      'pop':[1.5,1.7,3.6,2.4,2.9]}

frame=pd.DataFrame(data)
frame.index=list('abcde') 
frame

在这里插入图片描述

loc方法

  • 1、单个行名/列名 或 行名/列名的列表

要求:读取第2行,行名为’b’。

frame.loc['b']

在这里插入图片描述

注意: 上面这种写法,运行"print(type(frame.loc[‘b’]))"可以知道返回的是<class ‘pandas.core.series.Series’>对象,如果要<class ‘pandas.core.frame.DataFrame’>对象可以改成frame.loc[[‘b’]]。

frame.loc[['b']]

在这里插入图片描述
要求:取第1、2列的第2与第5行,第1、2列的列名分别为’state’与’year’,第2、5行的行名分别为’b’和’e’。

frame.loc[['b','e'],['state','year']]

在这里插入图片描述

  • 2、列名/行名的切片

要求:读取第2列,列名为’year’。

frame.loc[:,'year']  #返回的是<class 'pandas.core.series.Series'>对象。

在这里插入图片描述

frame.loc[:,['year']] #返回的是<class 'pandas.core.frame.DataFrame'>对象。

在这里插入图片描述

要求:取第2行第3列,第2行行名为’b’,第3列列名为’pop’。

frame.loc['b','pop']

在这里插入图片描述

要求:读取dataframe某个区域,比如第3列的第2到第5行,第3列为"pop"列,第2到第5行即b行到e行。

frame.loc['b':'e','pop'] #返回的是<class 'pandas.core.series.Series'>对象。

在这里插入图片描述

frame.loc['b':'e',['pop']] #返回的是<class 'pandas.core.frame.DataFrame'>对象。

在这里插入图片描述

要求:取第1、2列的第2到第5行,第1、2列的列名分别为’state’和’yea‘列,第2、5行的行名为’b’和‘e’行。

frame.loc['b':'e','state':'year'] #返回的是<class 'pandas.core.frame.DataFrame'>对象。

在这里插入图片描述

  • 3、返回布尔型列表的表达式(判断或函数)

要求:根据判断条件读取,取第3列大于2的。

frame.loc[frame['pop']>2,'pop'] #返回的是<class 'pandas.core.series.Series'>对象。

在这里插入图片描述

frame.loc[frame['pop']>2,['pop']] #返回的是<class 'pandas.core.frame.DataFrame'>对象。

在这里插入图片描述

要求:根据函数读取,取第3列大于2的所有行与列。

frame.loc[lambda x: x['pop']>2]

在这里插入图片描述

iloc方法

  • 1、单个下标 或 若干下标构成的列表,从0开始。

要求:取第2行的值。

frame.iloc[1] 

在这里插入图片描述
注意: 上面这种写法,运行"print(type(frame.iloc[1]]))"可以知道返回的是<class ‘pandas.core.series.Series’>对象,如果要<class ‘pandas.core.frame.DataFrame’>对象可以改成frame.iloc[[1]]。

frame.iloc[[1]]

在这里插入图片描述
要求:取第1、2列的第2与第5行。

frame.iloc[[1,4],[0,1]]

在这里插入图片描述

  • 2、下标的切片

要求:取第2列的值。

frame.iloc[:,1] #返回的是<class 'pandas.core.series.Series'>对象。

在这里插入图片描述

frame.iloc[:,[1]]  #返回的是<class 'pandas.core.frame.DataFrame'>对象。

在这里插入图片描述

要求:取第2行第3列

frame.iloc[1,2]

在这里插入图片描述

要求:读取dataframe某个区域,比如第3列的第2到第5行。

frame.iloc[1:5,2]  #返回的是<class 'pandas.core.series.Series'>对象。

在这里插入图片描述

frame.iloc[1:5,[2]] #返回的是<class 'pandas.core.frame.DataFrame'>对象。

在这里插入图片描述

要求:取第1、2列的第2到第5行。

frame.iloc[1:5,0:2] #因为是.iloc[]中用:表示从第几行/列到第几行/列是左闭右开的的方式,因此这里下标3表示第四行与第四列是取不到的。

frame.iloc[[1,2,3,4],[0,1]] #第二种写法

在这里插入图片描述

  • 3、可以返回合理值的函数

要求:当DataFrame的index是整数,取index为偶数的记录。

import pandas as pd
data={'state':['Ohio','Ohio','Ohio','Nevada','Nevada'],
      'year':[2000,2001,2002,2001,2002],
      'pop':[1.5,1.7,3.6,2.4,2.9]}

frame=pd.DataFrame(data)
frame

frame.iloc[lambda x: x.index % 2 == 0]

在这里插入图片描述


总结

共同点

  • 两者都接收两个参数,第一个参数是行的范围,第二个参数是列的范围。
  • 两者都可以有行索引值没有列索引值,但有列索引值前必须得有行索引值,但loc[]行索引值只能为名称形式来取,不能按下标形式来取。iloc[]则相反。

取第三列,无论使用loc[]函数还是iloc[]函数,如果没有行索引都会报错。

frame.loc['pop']
frame.loc[,'pop']
frame.iloc[,3]

不同点

  • 1、loc[]函数接收的是行/列的名称(可以是整数或者字符),iloc[]函数接收的是行/列的下标(从0开始),不能是字符。

  • 2、loc[]函数在切片时是按闭区间切片的,也就是区间两边都能取到,iloc[]函数则是按传统的左闭右开的方式切片的。


参考文章:
https://blog.csdn.net/weixin_43298886/article/details/112632237
https://blog.csdn.net/Leon_Kbl/article/details/97492966

更多推荐

【使用Cpolar将Tomcat网页传输到公共互联网上】

文章目录1.前言2.本地Tomcat网页搭建2.1Tomcat安装2.2配置环境变量2.3环境配置2.4Tomcat运行测试2.5Cpolar安装和注册3.本地网页发布3.1.Cpolar云端设置3.2Cpolar本地设置4.公网访问测试5.结语1.前言Tomcat作为一个轻量级的服务器,不仅名字很有趣(让人想起童年)

小程序引入vant-Weapp保姆级教程及安装过程的问题解决

小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。本文同时参与「掘力星计划」,赢取创作大礼包,挑战创作激励金当你想在小程序里引入vant时,第一步:打开官方文档,第二步:切到快速上手,然后开始步骤一、步骤二、步骤三?你只会看到--------------------------以下是正文------------

Python用正则化Lasso、岭回归预测房价、随机森林交叉验证鸢尾花数据可视化2案例|数据分享...

全文链接:https://tecdat.cn/?p=33632机器学习模型的表现不佳通常是由于过度拟合或欠拟合引起的,我们将重点关注客户经常遇到的过拟合情况(点击文末“阅读原文”获取完整代码数据)。相关视频过度拟合是指学习的假设在训练数据上拟合得非常好,以至于对新数据的模型性能造成负面影响。该模型对于训练数据中没有的新

数据分析回头看2——重复值检查/元素替换/异常值筛选

0、前言:这部分内容是对Pandas的回顾,同时也是对Pandas处理异常数据的一些技巧的总结,不一定全面,只是自己在数据处理当中遇到的问题进行的总结。1、当数据中有重复行的时候需要检测重复行:方法:使用pandas中的duplicated方法,在该方法中有两个参数subset和keep,subset需要提供一个列表,

基于Android+OpenCV+CNN+Keras的智能手语数字实时翻译——深度学习算法应用(含Python、ipynb工程源码)+数据集(五)

目录前言总体设计系统整体结构图系统流程图运行环境模块实现1.数据预处理2.数据增强3.模型构建4.模型训练及保存5.模型评估6.模型测试系统测试1.训练准确率2.测试效果3.模型应用1)程序下载运行2)应用使用说明3)测试结果相关其它博客工程源代码下载其它资料下载前言本项目依赖于Keras深度学习模型,旨在对手语进行分

SpringMVC之JSR303和拦截器

目录一、JSR3031.1什么是JSR3031.2为什么要使用JSR3031.3常用注解1.4快速入门1.4.1导入依赖1.4.2配置校验规则1.4.3入门案例二、拦截器2.1什么是拦截器2.1.1定义2.1.2作用领域2.2过滤器2.2.1定义2.2.2作用领域2.3拦截器与过滤器的区别2.4应用场景2.5快速入门2

【软件测试】selenium3

自动化测试的概念自动化测试指软件测试的自动化,在预设状态下运行应用程序或者系统,预设条件包括正常和异常,最后评估运行结果。将人为驱动的测试行为转化为机器执行的过程。自动化测试就相当于将人工测试手段进行转换,让代码去执行。提高测试效率,保障软件质量。自动化测试不能完全代替手工测试。通常是代替那些操作重复性比较高。常见自动

【数据结构】二叉树的节点数,叶子数,第K层节点数,高度,查找x节点,判断是否为完全二叉树等方法

💐🌸🌷🍀🌹🌻🌺🍁🍃🍂🌿🍄🍝🍛🍤📃个人主页:阿然成长日记👈点击可跳转📆个人专栏:🔹数据结构与算法🔹C语言进阶🚩不能则学,不知则问,耻于问人,决无长进🍭🍯🍎🍏🍊🍋🍒🍇🍉🍓🍑🍈🍌🍐🍍文章目录一、二叉数的结构体二、构建二叉树,供后续测试使用三、二叉树销毁四

【 Tkinter界面-练习05】 event和bind

一、说明事件和动作有关;所有的界面都与运动有关,本篇将对事件、事件触发、绑定回调函数等,其实是一系列部件配合的复杂的过程,这些过程牵扯到系统如何设计,线程、消息队列循环等。本篇将详细介绍各种因素的关系。二、事件循环在上一章的末尾,我们解释了如何使用进度条向用户提供有关长时间运行的反馈操作。进度条本身很简单:调用其方法,

【PHP】麻醉临床信息系统

麻醉临床信息系统以服务围术期临床业务工作的开展为核心,为医护人员、业务管理人员、院级领导提供流程化、信息化、自动化、智能化的临床业务综合管理平台。麻醉信息系统处理的数据包含病人的手术信息、麻醉信息、病人手术过程中从监护仪上采集到的数据和病人情况等。一、什么是全麻,什么是“半麻”?麻醉根据对全身的影响分为全身麻醉和部位麻

原生js之var let以及const的区别和作用

ES5:varES6:let、constvar怪异变量首先我们要明确,var是一个块变量也叫作用域变量,如果它放到一个函数中,在函数外调用应该是失败的,在不用vara=1,这样进行定义而变成a=2,时则这个变量就变成了全局变量,如<!DOCTYPEhtml><html><head><metacharset="utf-8

热文推荐