Pyrthon中pandas DataFrame对表格数据选取,修改,切片的实现

set_index()函数

在Python Pandas的数据处理中,set_index是一个非常常用的函数,它的作用就是将DataFrame中的一列或多列作为新的索引。使用set_index函数,可以快速地进行数据的筛选和重组。
如何在pandas中使用set_index( )与reset_index( )设置索引

函数解释
set_index(keys, drop=False, append=True, inplace=True, verify_integrity=True).rename(columns={‘id’: ‘index_id’})

  • keys:需要设置为index的列名
  • drop: 默认为True,将列作为索引后,是否删除原来的列
  • inplace: 默认为False,结果返回新的DataFrame实例,如果设置为True,那么结果返回原DataFrame实例,并且索引修改原DataFrame
  • append: 默认为False,如果为True,则保留原有索引,并追加新的索引
  • verify_integrity: 默认为False,如果为True,在设置新的索引后会检查索引列是否有重复值,如果有重复值则会报错

set_index的使用方法
set_index方法有两种使用方式:

  1. set_index():如果不指定参数,那么默认会将第一列设置为索引
  2. set_index(keys):keys是要设置为索引的列名或列名的列表,可以设置单个或多个索引
import pandas as pddf = pd.DataFrame(data={"姓名":['甲','乙','丙','丁'],"年龄":[12,23,34,43], "性别":['男','男','男','男']})
print(df)    #构建表格格式
df2 = df.set_index('姓名')    #将姓名那一列作为索引
print(df2)
df3 = df.set_index(['姓名','性别'])    #将姓名和性别作为索引
print(df3)

结果:

  姓名  年龄 性别
012123234343  男年龄 性别
姓名       
甲   12  男
乙   23  男
丙   34  男
丁   43  男年龄
姓名 性别    
甲  男   12
乙  男   23
丙  男   34
丁  男   43

set_index的注意事项
在使用set_index时,需要注意以下几个事项:

  • 设置索引之前,需要先进行数据清洗和处理,确保数据的准确性和完整性
  • 设置索引后,需要使用unique()函数检查索引是否有重复值,以避免后续数据操作时出现问题
  • 在合并DataFrame时,需要先设置索引,以提高数据合并的效率

数据子集的获取——应用iloc、loc、与ix完成数据子集的生成

Python数据处理工具 ——Pandas(数据的预处理)
通常,在Pandas模块中实现数据框子集的获取可以使用iloc、loc和ix三种“方法”,这三种方法既可以对数据行进行筛选,也可以实现变量的挑选,它们的语法可以表示成[rows_select,cols_select]。

iloc只能通过行号和列号进行数据的筛选,读者可以将iloc中的“i”理解为“integer”,即只能向[rows_select, cols_select]指定整数列表。该索引方式与数组的索引方式类似,都是从0开始,可以间隔取号,对于切片仍然无法取到上限。

loc要比iloc灵活一些,读者可以将loc中的“l”理解为“label”,即可以向[rows_select, cols_select]指定具体的行标签(行名称)和列标签(字段名)。注意,这里是标签不再是索引。而且,还可以将rows_select指定为具体的筛选条件,在iloc中是无法做到的。

ix是iloc和loc的混合,读者可以将ix理解为“mix”,该“方法”吸收了iloc和loc的优点,使数据框子集的获取更加灵活。为了使读者理解这三种方法的使用和差异,接下来通过具体的代码加以说明:

# 数据子集的获取
# 构造数据集
import pandas as pd
df1 = pd.DataFrame({'name':['张三','李四','王二','丁一','李五'],'gender':['男','女','女','女','男'],'age':[23,26,22,25,27]}, columns = ['name','gender','age'])
print(df1)
# 取出数据集的中间三行(即所有女性),并且返回姓名和年龄两列
print(df1.iloc[1:4,[0,2]]  )
print(df1.loc[1:3, ['name','age']])
print(df1.ix[1:3,[0,2]])

注意:ix方法已经过时了,建议使用前两个
结果:

name gender  age
0   张三      男   23
1   李四      女   26
2   王二      女   22
3   丁一      女   25
4   李五      男   27name  age
1   李四   26
2   王二   22
3   丁一   25name  age
1   李四   26
2   王二   22
3   丁一   25AttributeError: 'DataFrame' object has no attribute 'ix'

注意,这时的数据集是以员工姓名作为行名称,不再是之前的行号,对于目标数据的返回同样可以使用iloc、loc和ix三种方法。对于iloc来说,不管什么形式的数据集都可以使用,始终表示行索引,即取哪些行下标的观测;loc就不能使用数值表示行标签了,因为此时数据集的行标签是姓名,所以需要写入中间三行对应的姓名;通过ix方法,既可以用行索引(如代码所示)表示,也可以用行标签表示,可根据读者的喜好选择。由于并没有对数据集的变量做任何限制,所以cols_select用英文冒号表示,代表取出数据集的所有变量。

很显然,在实际的学习和工作中,观测行的筛选很少是通过写入具体的行索引或行标签,而是对某些列做条件筛选,进而获得目标数据。例如,在上面的df1数据集中,如何返回所有男性的姓名和年龄,代码如下:

# 使用筛选条件,取出所有男性的姓名和年龄
import pandas as pd
df1 = pd.DataFrame({'name':['张三','李四','王二','丁一','李五'],'gender':['男','女','女','女','男'],'age':[23,26,22,25,27]}, columns = ['name','gender','age'])print(df1)
print(df1.loc[df1.gender == '男',['name','age']])

结果:

  name gender  age
0   张三      男   23
1   李四      女   26
2   王二      女   22
3   丁一      女   25
4   李五      男   27name  age
0   张三   23
4   李五   27

如果是基于条件的记录筛选,只能使用loc和ix两种方法。正如代码所示,对iloc方法的那行代码做注释,是因为iloc不允许使用条件筛选,这行代码是无法运行成功的。对变量名的筛选,loc必须指定具体的变量名,而ix既可以使用变量名,也可以使用字段的数值索引。
loc和iloc函数用法详解(Python)

综上所述,ix方法几乎可以实现所有情况中数据子集的获取,是iloc和loc两种方法的优点合成体,而且对于行号与行名称一致的数据集来说(如df1数据集),名称索引的优先级在位置索引之前(如本节第一段代码中的df1.ix[1:3,[0,2]])。

loc()函数

读者可以将loc中的“l”理解为“label”,即可以向[rows_select, cols_select]指定具体的行标签(行名称)和列标签(字段名)。注意,这里是标签不再是索引。

提取特定单个数据

import pandas as pddf = pd.DataFrame(data={"姓名":['甲','乙','丙','丁'],"年龄":[12,23,34,43], "性别":['男','男','男','男']})
df2 = df.set_index('姓名')    #将姓名那一列作为索引
print(df2)# 要查乙的性别,根据索引‘乙’和列标签‘性别’来筛选
print('乙的性别是:', df2.loc['乙','性别'])   

结果:

    年龄 性别
姓名       
甲   12  男
乙   23  男
丙   34  男
丁   43  男
乙的性别是: 男

提取多行数据

import pandas as pddf = pd.DataFrame(data={"姓名":['甲','乙','丙','丁'],"年龄":[12,23,34,43], "性别":['男','男','男','男']})
df2 = df.set_index('姓名')    #将姓名那一列作为索引
print(df2)print(df2.loc[['乙','丁'],['年龄','性别']])

结果:

    年龄 性别
姓名       
甲   12  男
乙   23  男
丙   34  男
丁   43  男年龄 性别
姓名       
乙   23  男
丁   43

修改某一行某一列的值

Pandas库:从入门到应用(二)–行列数据读写
逐行读取DataFrame数据以及修改对应数据

import pandas as pddf = pd.DataFrame(data={"姓名":['甲','乙','丙','丁'],"年龄":[12,23,34,43], "性别":['男','男','男','男']})
print(df)
df2 = df.set_index('姓名')    #将姓名那一列作为行标签
print(df2)
# 方法一
name_list = df['姓名'].tolist()
print(name_list)
for i in range(4):if name_list[i] in ['甲', '丁']:print(df2.loc[name_list[i],'性别'])df2.loc[name_list[i],'性别'] = '女'else:pass
# # 方法2
# df2.loc[['甲', '丁'],'性别'] = '女'
# print(df2)

结果:

12  男
乙   23  男
丙   34  男
丁   43['甲', '乙', '丙', '丁']
男
男

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/146447.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

医院数字化LIS(检验信息系统)源码

临床检验信息管理系统(LIS)是利用计算机连接医疗设备,通过计算机信息处理技术,将医院检验科或实验室的临床检验数据进行自动收集、存储、处理、提取、传输和交换,满足所有授权用户的功能需求。 一、系统概述 1.LIS&am…

Redis篇---第五篇

系列文章目录 文章目录 系列文章目录前言一、持久化有两种,那应该怎么选择呢?二、怎么使用 Redis 实现消息队列?三、说说你对Redis事务的理解前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,…

自定义ES分词器

1 分词器的组成 ES的分词器主要由三部分组成: (1)原始文本处理-charactor filters 对原始文本进行处理。 (2)切词-tokenizer 按照规则进行切词。 (3)单词处理-token filters 将切词获取的…

Axure基础详解二十二:随机点名效果

效果演示 组件 建立一个【中继器】,内部插入一个“文本框”。【中继器】每页项目数为1,开始页为1。 设置交互 页面载入时交互 给【中继器】新曾行,“name”数据列添加10行数据,填入相应的名字;“shunxu”数据列全部…

C#与c++对应的类型 转载

//C#调用C++的DLL搜集整理的所有数据类型转换方式-转载 //c++:HANDLE(void *) ---- c#:System.IntPtr //c++:Byte(unsigned char) ---- c#:System.Byte //c++:SHORT(short) ---- c#:System.Int16 //c++:WORD(unsigned short) ---- c#:System.UInt16 //c++:INT(int) ---- c#:Sys…

黑马程序员微服务 分布式搜索引擎3

分布式搜索引擎03 0.学习目标 1.数据聚合 **聚合(aggregations)**可以让我们极其方便的实现对数据的统计、分析、运算。例如: 什么品牌的手机最受欢迎?这些手机的平均价格、最高价格、最低价格?这些手机每月的销售…

vue3.0中实现excel文件的预览

最近开发了一个需求,要求实现预览图片、pdf、excel、word、txt等格式的文件; 每种格式的文件想要实现预览的效果需要使用对应的插件,如果要实现excel格式文件的预览,要用到哪种插件呢? 答案:xlsx.full.min…

Java项目实战《苍穹外卖》 一、项目概述

人道洛阳花似锦,偏我来时不逢春。 系列文章目录 苍穹外卖是黑马程序员2023年的Java实战项目,作为业余练手用,需要源码或者课程的可以找我,无偿分享 Java项目实战《苍穹外卖》 一、项目概述Java项目实战《苍穹外卖》 二、项目搭建 …

计算机硬件组成部分

目录 中央处理器 控制器 运算器 存储器 输入输出设备 总线 硬件通常是指构成计算机的设备实体。一台计算机的硬件系统应由五个基本部分组成:运算器、控制器、存储器、输入和输出设备。现代计算机还包括中央处理器和总线设备。这五大部分通过系统总线完成指令所…

电子学会2023年06月青少年软件编程(图形化)等级考试试卷(一级)真题,含答案解析

青少年软件编程(图形化)等级考试试卷(一级) 一、单选题(共25题,共50分) 1. 看图找规律,请问下图红框中是?( ) A.

install YAPI MongoDB 备份mongo 安装yapi插件cross-request 笔记

登录容器 docker exec -it mongodb bash 登录mongo mongo -u root -p 123456 查看db show dbs 查看collection show collections 进入db use yapi 查看数据 db.<collection_name>.find() 带条件查看 db.<collection_name>.find({ <field>: <value>…

git使用patch进行补丁操作

文章目录 前言一、format-patch/am生成和应用补丁1、生成2、应用 二、patch文件解读 前言 在软件开发中&#xff0c;代码协作和版本管理是至关重要的。Git 是一个流行的分布式版本控制系统&#xff0c;它提供了各种功能来简化团队合作和代码管理。但是如何给已有项目打补丁&am…

Kafka学习笔记(三)

目录 第5章 Kafka监控&#xff08;Kafka Eagle&#xff09;5.2 修改kafka启动命令5.2 上传压缩包5.3 解压到本地5.4 进入刚才解压的目录5.5 将kafka-eagle-web-1.3.7-bin.tar.gz解压至/opt/module5.6 修改名称5.7 给启动文件执行权限5.8 修改配置文件5.9 添加环境变量5.10 启动…

【uniapp】Google Maps

话不多说 直接上干货 提前申请谷歌地图账号一、新建地图 使用h5获取当前定位或者使用三方uniapp插件 var coords ""navigator.geolocation.getCurrentPosition(function(position) {coords {lat: position.coords.latitude,lng: position.coords.longitude};lats …

【带宽、主频、位宽、数据传输速率】DDR带宽怎么计算?

文章目录 1. 如何计算DDR带宽2. DDR data rate和DDR主频3. Mbps和Mhz4. 出题 1. 如何计算DDR带宽 计算DDR理论带宽的公式为&#xff1a; DDR主频 * 位宽 理论带宽其中&#xff0c;位宽(bit width)指的是内存总线的位宽&#xff0c;例如64位、128位、16bit、32bit等&#xff…

Objectarx 使用libcurl请求WebApi

因为开发cad需要请求服务器的数据&#xff0c;再次之前我在服务器搭设了webapi用户传递数据&#xff0c;所以安装了libcurl在objectarx中使用数据。 Open VS2012 x64 Native Tools Command Prompt补充地址&#xff1a; 我在此将相关的引用配置图片&#xff0c;cad里面的应用和…

EtherCAT 伺服控制功能块实现

EtherCAT 是运动控制领域主要的通信协议&#xff0c;开源EtherCAT 主站协议栈 IgH 和SOEM 两个项目&#xff0c;IgH 相对更普及一些&#xff0c;但是它是基于Linux 内核的方式&#xff0c;比SOEM更复杂一些。使用IgH 协议栈编写一个应用程序&#xff0c;控制EtherCAT 伺服电机驱…

酷柚易汛ERP - 权限设置操作指南

1、产品介绍 对系统的同事管理、角色管理、数据授权进行设置 1.1 同事管理 对当前系统添加同事账号&#xff0c;超级管理员不允许删除 1.2 角色管理 对当前系统添加角色&#xff0c;系统中可以设置多种角色&#xff0c;不同角色设置不同权限&#xff0c;方便添加同事时进行…

Notepad+正则表达式使用方法

常用的元字符和语法规则来构建你的表达式&#xff1a; 正则表达式知识准备 字符匹配&#xff1a; \d&#xff1a;匹配任意数字。\w&#xff1a;匹配任意字母、数字或下划线。\s&#xff1a;匹配任意空白字符&#xff08;空格、制表符等&#xff09;。.&#xff1a;匹配除换行…

代码随想录算法训练营第五十八天丨 动态规划part18

739. 每日温度 思路 首先想到的当然是暴力解法&#xff0c;两层for循环&#xff0c;把至少需要等待的天数就搜出来了。时间复杂度是O(n^2) 那么接下来在来看看使用单调栈的解法。 什么时候用单调栈呢&#xff1f; 通常是一维数组&#xff0c;要寻找任一个元素的右边或者左边…