Pandas的数值访问(.loc, .iloc, .ix访问数据的区别)+query+set_index和reset_index

Pandas索引与切片:性能、对齐与避坑的底层逻辑 Pandas索引(Index)并非简单行标签,而是承担定位、对齐与广播功能的一维有序坐标系;切片(Slicing)则分为基于位置的.iloc、基于标签的.loc及布尔索引三类机制。其设计本质源于数据访问的二元需求:结构化处理依赖整数位置,业务语义依赖语义标签。这种分离带来显著技术价值——正确使用DatetimeIndex可将时间范围查询从O(n)优化至O(log n),合理选用.query()能降低65%内存峰值并提升3倍过滤速度。典型应用场景包括电商日志按天聚合、多级索引销售分析、实时风控单点赋值等。本文 阅读详情

今天整理的三个pandas的小知识点,是从工业化生产预测这个比赛中用到的三个,所以集体来整理一下:

1. pandas数值访问(.loc, .iloc,.ix)

首先,建立一个pd.DataFrame做演示:

import pandas as pd
data = pd.DataFrame({'A':[1,2,3],'B':[4,5,6],'C':[7,8,9]},index=["a","b","c"])
data

## 结果:

    A	B	C
a	1	4	7
b	2	5	8
c	3	6	9
  1. .loc[]函数:
    通过行索引 “Index” 中的具体值来取行数据。括号里面是先行后列,以逗号分割,行和列分别是行标签和列标签。比如我要得到数字5:

    data.loc["b","B"]
    

    因为行标签为b,列标签为B,同理,那么4就是data[“a”,”B”]
    上面只是选择某一个值,那么如果我要选择一个区域呢,比如我要选择5,8,6,9,那么可以这样做:

    data.loc['b':'c','B':'C']
    

    因为选择的区域,左上角的值是5,右下角的值是9,那么这个矩形区域的值就是这两个坐标之间,也就是对应5的行标签到9的行标签,5的列标签到9的列标签,行列标签之间用逗号隔开,行标签与行标签之间,列标签与列标签之间用冒号隔开,记住,.loc是用行列标签来进行选择数据的, 且前闭后闭。

    那么,我们会想,那我们只知道要第几行,第几列的数据呢,这该怎么办,刚好,.iloc就是干这个事的。

  2. .iloc[]
    .iloc[]与loc一样,中括号里面也是先行后列,行列标签用逗号分割,与loc不同的之处是,.iloc 是根据行数与列数来索引的,比如上面提到的得到数字5,那么用iloc来表示就是data.iloc[1,1],因为5是第2行第2列,注意索引从0开始的,同理4就是data.iloc[0,1],同样如果我们需要选择一个区域,比如我要选择5,8,6,9,那么用,iloc来选择就是

    data.iloc[1:3,1:3]
    

    因为5在第二行第二列,9在第三行第三列,注意此处区间前闭后开,所以是1:3,与loc不同的是loc前闭后闭,以及loc是根据行列标签,而.iloc是根据行数与列数

  3. .ix[]
    .ix我发现,上面两种用法他都可以,它既可以根据行列标签又可以根据行列数,比如拿到5

    data.ix[1,1]
    data.ix["b","B"]
    

    上面两种做法都可以的,同理选择一个区域

    data.ix[1:3,1:3]
    data.ix['b':'c','B':'C']
    
    以上两种方法都是取到5,6,8,9
    

再详细点的Pandas中loc和iloc函数用法详解(源码+实例)

2. pandas.set_index和reset_index

  • DataFrame可以通过set_index方法,可以设置单索引和复合索引。

DataFrame.set_index(keys, drop=True, append=False, inplace=False, verify_integrity=False)

  • keys:列标签或列标签/数组列表,需要设置为索引的列
  • drop:默认为True,删除用作新索引的列
  • append:默认为False,是否将列附加到现有索引
  • inplace:默认为False,适当修改DataFrame(不要创建新对象)
  • verify_integrity:默认为false,检查新索引的副本。否则,请将检查推迟到必要时进行。将其设置为false将提高该方法的性能。
  • reset_index可以还原索引,从新变为默认的整型索引

DataFrame.reset_index(level=None, drop=False, inplace=False, col_level=0, col_fill=”)

  • level:int、str、tuple或list,默认无,仅从索引中删除给定级别。默认情况下移除所有级别。控制了具体要还原的那个等级的索引
  • drop:drop为False则索引列会被还原为普通列,否则会丢失
  • inplace:默认为false,适当修改DataFrame(不要创建新对象)
  • col_level:int或str,默认值为0,如果列有多个级别,则确定将标签插入到哪个级别。默认情况下,它将插入到第一级。
  • col_fill:对象,默认‘’,如果列有多个级别,则确定其他级别的命名方式。如果没有,则重复索引名

下面看操作:

import pandas as pd
df = pd.DataFrame({ 'A': ['A0', 'A1', 'A2', 'A3'],
                    'B': ['B0', 'B1', 'B2', 'B3'],
                    'C': ['C0', 'C1', 'C2', 'C3'],
                    'D': ['D0', 'D1', 'D2', 'D3']})
df

df是一个正常的DataFrame结构:
在这里插入图片描述
下面把A列置成索引列:

drop_t = df.set_index('A',drop=True, append=False, inplace=False, verify_integrity=False)
drop_t

# 这样就可以通过索引名和列名来访问元素了
drop_t.loc["A0":"A2"]

在这里插入图片描述
drop=False, 这样不会删除原列

# drop=False, 不会删除原列
no_drop_t = df.set_index('A',drop=False, append=False, inplace=False, verify_integrity=False)
no_drop_t

结果如下: 不过这个用的不多。
在这里插入图片描述
索引的还原: reset_index()

reset_drop_t = drop_t.reset_index(drop=False) #索引列会被还原为普通列
reset_drop_t

reset_no_drop_t = no_drop_t.reset_index(drop=True) #索引列会被还原为普通列
reset_no_drop_t

又回到了原来的样子:
在这里插入图片描述

3. pandas.query

这个是字符串表达式查询,基于DataFrame列的计算代数式。对于过滤的操作,可以使用query()方法。注意支持string,不支持布尔类型, 与query类似的一个函数是eval, 是使用字符串表达式来计算对DataFrame的操作,支持算术,比较,位,对象索引,列间计算等, 这俩都是高性能函数,后者遇到的时候再整理吧。

import pandas as pd
d={
    'name':['xiao','dan','qi'],
    'sex':['male','female','male'],
    'age':[23,24,24]
}
df=pd.DataFrame(d)

结果如下:
在这里插入图片描述

# df query('age'>23)  # 这个会报错
df.query('age>23')

也是类似与选择出pandas里面符合条件的样本。
在这里插入图片描述

好了,今天分享是pandas的三个小知识点,也是比较常用的一些基本操作, 来自于一个工业化工生产预测的比赛。

一切从实用的角度出发。 希望能帮到您!

矩阵子集提取:从基础索引到Pandas/NumPy高效操作指南 在数据处理与机器学习中,矩阵子集提取是核心操作,涉及从二维数组中按需筛选行、列或区域。其原理基于索引系统,分为基于位置的整数索引和基于标签的命名索引,前者直接对应内存布局,后者提升代码可读性。掌握高效子集提取技术能显著提升数据清洗、特征工程及模型准备的效率,是数据科学工作流的基础。本文聚焦Pandas DataFrame与NumPy ndarray两大工具,详解loc、iloc、布尔索引等关键方法,并针对DataFrame操作中常见的视图与副本问题提供解决方案,帮助读者在数据分析、特征选择等实际场景中实现精 阅读详情

相关推荐

在pandas中使用query替代loc进行高效简洁的条件筛选

本文主要介绍了在pandas中使用query替代loc进行高效的条件筛选,希望对新手有所帮助。 文章目录 1. loc条件筛选 1.1 理论总结 1.2 实例讲解 2. 高效的query条件筛选 2.1 注意事项 2.2 实例讲解

herosunly的博客 1万+

pandas索引(loc,[],iloc,query,at/iat,cut,set_index,sort_index,reset_index,where,drop_duplicates...)

快速浏览pandas简单介绍和本系列说明一、单级索引1. 读取csv格式的新发现2. loc方法、iloc方法、[ ]操作符Reference pandas简单介绍和本系列说明 pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。Pandas 纳入了大量库和一些标准的数据模型,提供了高效地操作大型数据集所需的工具。pandas提供了大量能使我们快速便捷地处理数据的函...

laicikankna的博客 738

Obsidian笔记同步实战:基于Git的私有化部署与自动化管理

本文详细介绍了如何利用Git为Obsidian笔记构建私有化、自动化且免费的同步方案。通过安装配置Git与Obsidian-git插件,结合Gitee等远程仓库,实现笔记的版本管理、多设备同步与自动备份,打造安全可靠的知识管理体系。

y7z8a的博客 268

Python学习之:pandas 索引 loc,iloc ;数据过滤和筛选

import pandas as pd columns = ['name','age','sex'] data = [['wang',15,'male'], ['li',20,'female']] df = pd.DataFrame(data=data,columns=columns) df name age sex 0 wang 15

qq_42902997的博客 3420

zemax显微镜设计

光学显微镜(Optical Microscope,简写OM)是利用光学原理,把人眼所不能分辨的微小物体放大成像,以供人们提取微细结构信息的。我这里是插入进来之后才反转,如果之前已经在目镜的单独文件夹反转过了就不用了。将目镜的焦距设定为25mm,通过缩放,然后将镜头调转过来。镜头数据中的曲率半径、物距像距都设置为变量。将镜头的焦距整体变为16.25mm。将孔径类型设置为按照光阑尺寸浮动。打开物镜的文件,选择插入镜头。由英国物理学家虎克制作。2、像空间孔径0.25。3、像面大小-0.9。

fendoudecheng的博客 8535

大白话,Android Studio安装及其资源分享(离线gradle配置)

安装AndroidAtudio,并通过aliClound镜像与离线gradle配置,来跳过相对“繁文缛节”的过程,直接实现开发

wangzixuanemp的博客 3594

[Pandas基础] Pandas 数据查询

Pandas 数据查询的几种方法 1. df.loc方法查询,根据行,列的标签值查询 2. df.iloc方法查询 ,根据行,列的数字位置进行查询 3. df.where方法 4.df.query方法

m0_74827981的博客 3000

简易背单词系统C/C++

#include<stdio.h> #include<string.h> int F=20,N=100,k=0; int score[100]; int count=0; void hello(); void add(); void preview(); void mdelete(); void etc(); void cte(); void mscore(); void...

青木年华 9150

Pandas(十四)--索引操作

目录 索引Index 创建索引 设置索引 重置索引 分层索引MultiIndex 创建分层索引 应用分层索引 分层索引切片取值 聚合函数应用 局部索引 行索引层转换为列索引 列索引实现分层 交换层和层排序 索引Index 通过索引(Index)可以从 DataFame 中选择特定的行数和列数,这种选择数据的方式称为“子集选择”。在 Pandas 中,索引值也被称为标签(label),它在 Jupyter 笔记本中以粗体字进行显示。索引可以加快数据访问的速度,它就好比数据的书签,

Hanscal 8068

YOLOv11改进策略【Neck】| SEAM:分离和增强注意模块,解决复杂场景下的小目标遮挡问题

本文记录的是利用 SEAM 模块优化 YOLOv11 的目标检测网络模型。的设计出发点在于解决复杂场景下的人脸遮挡问题,相当于是小目标被其他物体部分遮挡时,传统方法因特征缺失导致检测精度下降的问题。该模块通过增强未遮挡区域的特征响应并补偿被遮挡区域的信息损失,提升模型对遮挡小目标的检测能力。YOLO-FaceV2: A Scale and Occlusion Aware Face DetectorSEAM模块(Separated and Enhancement Attention Module)的设计出发点

Limiiiing的博客 2275

“详规一张图”——上海土地利用数据

本文围绕城市规划与土地管理中空间数据的重要性,介绍了基于地理信息系统(GIS)技术对上海市用地数据进行获取与处理的具体方法。文章以上海市为例,详细阐述了如何通过构建以10米为间隔的网格点覆盖全市范围,并采用GET请求方式从“上海用地规划官网:详细规划‘一张图’公众版”平台获取地块信息的过程。通过对API接口参数的设置,包括坐标系、几何类型和返回格式等,实现了对每个网格点对应地块的属性信息(如规划用地类型、容积率、地块编号等)及几何形状信息的提取。

weixin_45812624的博客 2191

Pandas数据分析实战:从数据清洗到可视化

Pandas作为Python生态中强大的数据分析库,其核心数据结构DataFrame提供了高效处理二维表格数据的能力。通过向量化计算原理,Pandas能够比纯Python代码实现数十倍的性能提升,特别适合金融、电商等领域的结构化数据处理。在数据工程实践中,Pandas常被用于数据清洗(处理缺失值、异常值)、特征工程(日期处理、分类编码)和统计分析(聚合计算、交叉分析)等场景。结合热词'DataFrame'和'向量化计算',本文通过电商用户行为分析等实际案例,展示如何用Pandas实现从原始数据到业务洞察的全

weixin_34315485的博客 317

基于YOLOv5的人脸识别系统:从构建到应用的全流程指南

本文详细介绍了基于YOLOv5的人脸识别系统开发全流程。首先阐述了YOLOv5模型的高效性和准确性优势,随后分步骤讲解了深度学习环境配置、数据集准备(推荐WIDER FACE数据集)和模型训练方法。重点展示了如何将训练好的模型集成到Tkinter开发的GUI界面中,实现图片上传、人脸检测和结果可视化功能。文章提供完整的代码示例和飞书文档链接(密码:946m22&8),帮助开发者快速构建可交互的人脸识别系统,适用于安防、门禁等多种应用场景。通过该项目,读者可掌握YOLOv5的实际应用和界面集成技术。

FJN110的博客 164

Pandas数据分析:从基础到实战优化

Pandas作为Python生态中最强大的数据分析库,其核心数据结构DataFrame和Series通过向量化计算和智能索引机制,显著提升了数据处理效率。在数据科学领域,内存优化和类型处理是关键挑战,Pandas通过category类型和PyArrow后端等技术实现高效内存管理。实际应用中,从金融建模到电商分析,Pandas能够处理时间序列重采样、RFM客户分群等复杂场景。特别是在数据清洗环节,缺失值处理和异常值检测的多种策略,结合groupby聚合与pivot透视,构成了完整的数据分析流水线。对于大规模数

weixin_30904593的博客 405

【智能模型系列】基于Unity和MediaPipe【手部追踪+手势识别】系统开发指南

在本文中,我将详细介绍一个基于MediaPipe的Unity手势识别系统,该系统能够识别多种常见手势(如拳头、点赞、胜利手势等),并提供完整的事件系统来处理手势状态变化。这个系统非常适合用于VR/AR交互、手势控制游戏或任何需要自然用户界面的应用场景。

纯技术流日常开发商业开发记录总结等 574

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

pandas中使用query查询时列名中存在空格,报语法错误,使用反引号试试看

query查询时列名存在空格怎么办?

晨晨渝奇的博客 1395

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

Pandas query 的用法, df.query

转载自:https://blog.csdn.net/tcy23456/article/details/85887334 Pandas df.query 今天看到了query的用法,被这个函数的简洁所折服… df.query(expr,inplace = False,** kwargs )# 使用布尔表达式查询帧的列 参数: # expr:str要评估的查询字符串。你可以在环境中引用变量,在它们...

Reach Higher 7万+

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

第二章 索引-学习笔记

第二章 索引 import numpy as np import pandas as pd 一、索引器 1. 表的列索引 列索引是最常见的索引形式,一般通过[]来实现。通过[列名]可以从DataFrame中取出相应的列,返回值为Series,例如从表中取出姓名一列: # 读取数据,usecols 取所需列 df = pd.read_csv('data/learn_pandas.csv', usecols = ['School', 'Grade', 'Name', 'Gender', 'Weight', '

qq_45396577的博客 700

Pandas学习笔记—索引

索引1. 单级索引1.1 loc方法、iloc方法、[]操作符1.1.1 loc方法 1. 单级索引 1.1 loc方法、iloc方法、[]操作符 1.1.1 loc方法 单行索引 多行索引 单列索引

lz你ps的博客 1268

df.query的使用和df.loc方法对比

使用df.query()方法筛选DataFrame数据,要比loc方法来的简洁 常用方法 # 常用筛选 df.query('节庆=="夏季"') #loc方法对比 df.loc[df['节庆']=="夏季"] 数学表达式 # 数学表达式 > , + - * df.query('总数量>10000').head() #loc方法对比 df.loc[df['总数量']>10000].head() 通过变量筛选 # 通过变量筛选 season = "春节" df.query('节庆

m0_46326858的博客 1897

Pandas进阶叁 索引

Pandas进阶叁 索引 pandas进阶系列根据datawhale远昊大佬的joyful pandas教程写一些自己的心得和补充,本文部分引用了原教程,并参考了《利用Python进行数据分析》、pandas官网 这几天太忙了,这次没怎么总结学习的内容,先把做的作业题放一下,晚上刚从外地回来,明天开始有更多时间了,这次打卡内容有些单薄,希望助教大大理解(题目思考过程随后补上) 【练一练】 select_dtypes是一个实用函数,它能够从表中选出相应类型的列,若要选出所有数值型的列,只需使用.select_

qq_32844743的博客 511

机器学习(2)Pandas数据读取、选择、定位(loc、iloc、ix)

""" 读取csv文件 该文本中的分割符既有空格又有制表符(‘/t’),sep参数用‘/s+’,可以匹配任何空格。 """ import pandas as pd dataset1 = pd.read_csv('C:/Users/62497/Desktop/data1.csv',sep='\s+') # header=None:没有每列的column name,可以自己设定 # encoding=...

weixin_44285715的博客 2万+

python大数据分析——pandas基本数据类型类型及操作(DataFrame,数据选择函数,iloc & loc)

构建&索引DataFrame,pandas中的数据选择函数,iloc & loc

dear_jing的博客 1581

python中pandas用法iloc,Python Pandas .iloc[]用法及代码示例

Python是进行数据分析的一种出色语言,主要是因为以数据为中心的Python软件包具有奇妙的生态系统。 Pandas是其中的一种,使导入和分析数据更加容易。Pandas 提供了一种独特的方法来从 DataFrame 中检索行。当 DataFrame 的索引标签不是数字序列0、1、2、3….n或用户不知道索引标签时,将使用Dataframe.iloc []方法。可以使用在 DataFrame 中不...

weixin_36018748的博客 2182

Pandas 数据中的loc与iloc含义以及操作

pandas 中必回的数据操作,loc,iloc,可以是操作数据变得更简单

qq_42336581的博客 9550

一文介绍Pandas中的9种数据访问方式

导读Pandas之于日常数据分析工作的重要地位不言而喻,而灵活的数据访问则是其中的一个重要环节。本文旨在讲清Pandas中的9种数据访问方式,包括范围读取和条件查询等。Pandas中的核心...

小数志 1611
上一篇: 白话机器学习算法理论+实战番外篇之Xgboost
下一篇: 数据竞赛修炼笔记之工业化工生产预测
翻滚的小@强
翻滚的小@强 领域专家: 物联网技术领域 领域专家: 物联网技术领域
博客等级 码龄9年 6462粉丝 308原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值