【Pandas入门教程】如何选择DataFrame的子集

news2024/11/16 21:26:45

如何选择DataFrame的子集

来源:Pandas官网:https://pandas.pydata.org/docs/getting_started/intro_tutorials/index.html

在这里插入图片描述

文章目录

    • 如何选择DataFrame的子集
        • 导包
        • 数据准备
        • 【1】如何从DataFrame中选择特定列?
        • 【2】如何从DataFrame中筛选特定行
        • 【3】如何从DataFrame选择特定的行和列
        • 【小结】

导包

import pandas as pd

数据准备

还是使用的泰坦尼克号的数据

titanic = pd.read_csv("titanic.csv")
titanic.head()
PassengerIdSurvivedPclassNameSexAgeSibSpParchTicketFareCabinEmbarked
0103Braund, Mr. Owen Harrismale22.010A/5 211717.2500NaNS
1211Cumings, Mrs. John Bradley (Florence Briggs Th...female38.010PC 1759971.2833C85C
2313Heikkinen, Miss. Lainafemale26.000STON/O2. 31012827.9250NaNS
3411Futrelle, Mrs. Jacques Heath (Lily May Peel)female35.01011380353.1000C123S
4503Allen, Mr. William Henrymale35.0003734508.0500NaNS

【1】如何从DataFrame中选择特定列?

在这里插入图片描述

我对泰坦尼克号乘客的年龄感兴趣。

ages = titanic['Age']
ages.head()
0    22.0
1    38.0
2    26.0
3    35.0
4    35.0
Name: Age, dtype: float64

若要选择单个列,在相关列的列名称中使用方括号 []

DataFrame中的每一列都是一个Series。选择单个列时,返回的对象是pandas Series。我们可以通过检查输出的类型来验证这一点:

type(titanic['Age'])
pandas.core.series.Series

并查看输出的shape:

titanic['Age'].shape
(891,)

DataFrame.shape 是 pandas Series和数据DataFrame的属性,其中包含行数和列数:(nrows, ncolumns)。pandas Series是一维的,只返回行数。

我对泰坦尼克号乘客的年龄和性别很感兴趣。

age_sex = titanic[['Age', 'Sex']]
age_sex.head()
AgeSex
022.0male
138.0female
226.0female
335.0female
435.0male

要选择多个列,使用选择括号内的列名称列表[].

【注意】内部方括号定义具有列名的 Python 列表,而外部方括号用于从 pandas 数据DataFrame

返回的数据类型是pandas dataframe:

type(titanic[['Age', 'Sex']])
pandas.core.frame.DataFrame
titanic[['Age', 'Sex']].shape
(891, 2)

所选内容返回了一个包含 891 行和 2 列的数据DataFrame。记住,DataFrame是二维的,具有行和列维度。

【2】如何从DataFrame中筛选特定行

在这里插入图片描述

我对35岁以上的乘客感兴趣。

above_35 = titanic[titanic['Age'] > 35]
above_35.head()
PassengerIdSurvivedPclassNameSexAgeSibSpParchTicketFareCabinEmbarked
1211Cumings, Mrs. John Bradley (Florence Briggs Th...female38.010PC 1759971.2833C85C
6701McCarthy, Mr. Timothy Jmale54.0001746351.8625E46S
111211Bonnell, Miss. Elizabethfemale58.00011378326.5500C103S
131403Andersson, Mr. Anders Johanmale39.01534708231.2750NaNS
151612Hewlett, Mrs. (Mary D Kingcome)female55.00024870616.0000NaNS

要基于条件表达式选择行,在选择括号内使用条件[].

选择括号 titanic[“Age”] > 35 内的条件检查 Age 列的值大于 35 的行:

titanic['Age'] > 35
0      False
1       True
2      False
3      False
4      False
       ...  
886    False
887    False
888    False
889    False
890    False
Name: Age, Length: 891, dtype: bool

条件表达式 (> 的输出,但也包括 ==、!=、<、<=,…将起作用)实际上是熊猫Series的布尔值(True或False),其行数与原始DataFrame相同。此类布尔值Series可用于筛选DataFrame,方法是将其放在选择方括号 [] 之间。将仅选择值为 True 的行。

我们从之前知道,原始的泰坦尼克号DataFrame由 891 行组成。让我们通过检查生成的DataFrame above_35 shape 属性来查看满足条件的行数above_35:

above_35.shape
(217, 12)

我对2级和3号舱的泰坦尼克号乘客感兴趣。

class_23 = titanic[titanic['Pclass'].isin([2, 3])]
class_23.head()
PassengerIdSurvivedPclassNameSexAgeSibSpParchTicketFareCabinEmbarked
0103Braund, Mr. Owen Harrismale22.010A/5 211717.2500NaNS
2313Heikkinen, Miss. Lainafemale26.000STON/O2. 31012827.9250NaNS
4503Allen, Mr. William Henrymale35.0003734508.0500NaNS
5603Moran, Mr. JamesmaleNaN003308778.4583NaNQ
7803Palsson, Master. Gosta Leonardmale2.03134990921.0750NaNS

与条件表达式类似,isin() 条件函数为提供列表中的值的每一行返回 True。要基于此类函数筛选行,请使用选择方括号 [] 内的条件函数。在这种情况下,选择括号 titanic[“Pclass”].isin([2, 3]) 中的条件检查 Pclass 列是 2 行还是 3 行。

以上等效于按类为 2 或 3 的行进行筛选,并将这两个语句与 |(或)运算符组合在一起:

class_23 = titanic[(titanic['Pclass'] == 2) | (titanic['Pclass'] == 3)]
class_23.head()
PassengerIdSurvivedPclassNameSexAgeSibSpParchTicketFareCabinEmbarked
0103Braund, Mr. Owen Harrismale22.010A/5 211717.2500NaNS
2313Heikkinen, Miss. Lainafemale26.000STON/O2. 31012827.9250NaNS
4503Allen, Mr. William Henrymale35.0003734508.0500NaNS
5603Moran, Mr. JamesmaleNaN003308778.4583NaNQ
7803Palsson, Master. Gosta Leonardmale2.03134990921.0750NaNS

组合多个条件语句时,每个条件必须用括号 () 括起来。此外,不能使用 or/and,但需要使用 or 运算符| 和 and 运算符&.

我想使用已知年龄的乘客数据。

age_no_na = titanic[titanic['Age'].notna()]
age_no_na.head()
PassengerIdSurvivedPclassNameSexAgeSibSpParchTicketFareCabinEmbarked
0103Braund, Mr. Owen Harrismale22.010A/5 211717.2500NaNS
1211Cumings, Mrs. John Bradley (Florence Briggs Th...female38.010PC 1759971.2833C85C
2313Heikkinen, Miss. Lainafemale26.000STON/O2. 31012827.9250NaNS
3411Futrelle, Mrs. Jacques Heath (Lily May Peel)female35.01011380353.1000C123S
4503Allen, Mr. William Henrymale35.0003734508.0500NaNS

notna() 条件函数为每行返回一个 True,这些值不是 Null 值。因此,这可以与选择括号 [] 结合使用以过滤数据表。

您可能想知道实际发生了什么变化,因为前 5 行仍然是相同的值。验证的一种方法是检查形状是否已更改:

age_no_na.shape
(714, 12)

【3】如何从DataFrame选择特定的行和列

在这里插入图片描述

我对35岁以上乘客的姓名感兴趣。

adult_names = titanic.loc[titanic['Age'] > 35, 'Name']
adult_names.head()
1     Cumings, Mrs. John Bradley (Florence Briggs Th...
6                               McCarthy, Mr. Timothy J
11                             Bonnell, Miss. Elizabeth
13                          Andersson, Mr. Anders Johan
15                     Hewlett, Mrs. (Mary D Kingcome) 
Name: Name, dtype: object

在这种情况下,行和列的子集是一次性创建的,仅使用选择括号 [] 已不够。选择括号 [] 前面需要 loc/iloc 运算符。使用 loc/iloc 时,逗号前面的部分是所需的行,逗号后面的部分是要选择的列。

使用列名、行标签或条件表达式时,请在选择方括号 [] 前面使用 loc 运算符。对于逗号之前和之后的部分,您可以使用单个标签、标签列表、标签切片、条件表达式或冒号。使用冒号指定要选择所有行或列。

我对第 10 到 25 行和第 3 到 5 列感兴趣。

titanic.iloc[9:25, 2:5]
PclassNameSex
92Nasser, Mrs. Nicholas (Adele Achem)female
103Sandstrom, Miss. Marguerite Rutfemale
111Bonnell, Miss. Elizabethfemale
123Saundercock, Mr. William Henrymale
133Andersson, Mr. Anders Johanmale
143Vestrom, Miss. Hulda Amanda Adolfinafemale
152Hewlett, Mrs. (Mary D Kingcome)female
163Rice, Master. Eugenemale
172Williams, Mr. Charles Eugenemale
183Vander Planke, Mrs. Julius (Emelia Maria Vande...female
193Masselmani, Mrs. Fatimafemale
202Fynney, Mr. Joseph Jmale
212Beesley, Mr. Lawrencemale
223McGowan, Miss. Anna "Annie"female
231Sloper, Mr. William Thompsonmale
243Palsson, Miss. Torborg Danirafemale

同样,行和列的子集是一次性完成的,仅使用选择括号 [] 已不够。当根据某些行和/或列在表格中的位置对它们特别感兴趣时,请使用选择括号前面的 iloc 运算符[].

使用 loc 或 iloc 选择特定行和/或列时,可以为所选数据分配新值。例如,要将名称anonymous分配给第三列的前 3 个元素:

titanic.iloc[0:3, 3] = "anonymous"

titanic.head()
PassengerIdSurvivedPclassNameSexAgeSibSpParchTicketFareCabinEmbarked
0103anonymousmale22.010A/5 211717.2500NaNS
1211anonymousfemale38.010PC 1759971.2833C85C
2313anonymousfemale26.000STON/O2. 31012827.9250NaNS
3411Futrelle, Mrs. Jacques Heath (Lily May Peel)female35.01011380353.1000C123S
4503Allen, Mr. William Henrymale35.0003734508.0500NaNS

【小结】

选择数据子集时,使用方括号 []
在这些括号内,您可以使用单个列/行标签、列/行标签列表、标签切片、条件表达式或冒号。

使用行和列名称时,使用 loc 选择特定的行和/或列。

使用表中的位置时,使用 iloc 选择特定的行和/或列。

我们可以根据 loc/iloc 为所选内容指定新值.

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

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

相关文章

读研2年,我选择从中科院退学转行做码农

从入学天坑材料专业到退学 先自我介绍一下&#xff1a;我天坑材料专业&#xff0c;本科某211&#xff0c;保研到中科院&#xff0c;但是我真是菜的抠脚&#xff0c;还懒&#xff0c;也不喜欢科研&#xff0c;论文达不到毕业要求&#xff0c;纠结之下研三退学转码农了。 读了2…

基于51单片机的电子秤(5KG+上限报警)

电子秤5KG上限警报设计 原理图&#xff1a; 程序运行图&#xff1a; 部分程序&#xff1a; #include "main.h" #include "LCD1602.h" #include "HX711.h" #include "EEPROM.H" //定义变量 unsigned char KEY_NUM 0; //用来存放按…

Java并发——ThreadLocal总结

概述 并发问题&#xff0c;有时候&#xff0c;可以用ThreadLocal方式来避免。 ThreadLocal&#xff0c;顾名思义&#xff0c;就是线程自己的&#xff0c;独享的&#xff0c;就像线程栈是线程独享的一样。 本文讨论三点&#xff1a; 基本用法设计原理父子线程 基础用法 考虑…

JMS规范及落地产品

目录 一、JMS是什么 二、MQ中间件的其他落地产品 三、JMS的组成结构和特点 四、JMS的可靠性 &#xff08;重要&#xff09; &#xff08;一&#xff09;PERSISTENT&#xff1a;持久性 &#xff08;二&#xff09;事务 &#xff08;三&#xff09;Acknowledge&#xff1a…

C#,图像二值化(01)——二值化算法综述与二十三种算法目录

图像二值化&#xff0c;就是把彩色&#xff08;先转为灰色图&#xff09;最终转为黑白两色图片的计算过程。 看似极其简单&#xff0c;但人们研究了几十年&#xff0c;却始终未达到至臻境界的问题。 本文简要介绍了 图像二值化的算法原理、分类及二十三种算法的目录&#xff…

freeswitch的gateway配置方案

概述 freeswitch是一款简单好用的VOIP开源软交换平台。 在voip的网络模型中&#xff0c;网关是我们经常会遇到的概念。 在freeswitch中&#xff0c;如何配置gateway&#xff0c;如何使用好gateway的模型和功能。 本节简单介绍fs中gateway相关的配置方案。 环境 centos&am…

csp-202209

202209题目一&#xff1a;如此编码【100分】题目二&#xff1a;何以包邮&#xff1f;【100分】题目三&#xff1a;防疫大数据【100分】题目一&#xff1a;如此编码【100分】 比较简单的题&#xff0c;根据题意计算一遍就行 一定要关注csp题目中的提示&#xff0c;这个是很有用…

达梦数据IPO过会:拟募资24亿 光谷“扫地僧”冯裕才将敲钟

雷递网 雷建平 12月23日武汉达梦数据库股份有限公司&#xff08;简称&#xff1a;“达梦数据”&#xff09;日前IPO过会&#xff0c;准备在科创板上市。达梦数据计划募资23.51亿元。其中&#xff0c;3.52亿元用于集群数据库管理系统升级项目&#xff0c;3.43亿元用于高性能分布…

[翻译+笔记]变分自编码器:从AutoEncoder到Beta-VAE

与GAN的那篇笔记相同, 做一下笔记. 并不是全文翻译, 只翻译一部分. 原文地址: from AutoEncoder to Beta-VAE 0. 前言 自编码器是用来重构高维数据的&#xff0c;它利用一个有bottleneck层的神经网络。bottleneck层获取压缩的潜在编码&#xff0c;这样将嵌入向量以低维表示可…

Activity生命周期

Activity生命周期 1.Activity状态 1.基本状态 运行&#xff0c;active。位于最前台&#xff0c;可以和用户交互的激活状态。暂停&#xff0c;pause&#xff0c;被透明或者Dialog覆盖&#xff0c;此时可见失去焦点但是不允许交互。停止&#xff0c;stop&#xff0c;被Active覆盖…

spring提前加载,懒加载,bean的作用域和注入注解讲解

前言 sping知识随笔笔记&#xff1b;spring提前加载&#xff0c;懒加载&#xff0c;bean的作用域和注入注解讲解 这里写目录标题前言1 depends-on2 bean的作用域3 lazy-init 懒加载4 Autowrite和Resource的区别和使用1 depends-on depends-on 是提前加载&#xff0c;比如在实…

关于node.js版本切换nvm的命令和安装

首先是安装,第一步,搜索下方链接地址下载Releases coreybutler/nvm-windows GitHub 安装应用下载好后直接安装就可以了,或者下载一个压缩包,在下载安装之前建议先将之前下载的node版本给删除,否则会报错。 上面的操作都结束后,那么,下面就需要通过管理员的权限去查…

外汇天眼:利空美元!2023年美国经济将如履薄冰?各大银行预测整体不乐观!

高盛表示&#xff0c;美国经济可能避免衰退。摩根士丹利预计&#xff0c;美国经济在2023年只是避开了衰退&#xff0c;但着陆并不那么软。瑞士信贷认为&#xff0c;美国明年可以避免经济下滑。摩根大通警告称&#xff0c;明年很有可能出现经济衰退。美国银行预测2023年第一季度…

大学宿舍四位舍友皆为软测,3年后的现状~

笔者最近收到测试员好友小H的分享&#xff0c;临年关&#xff0c;他参加了一场大学舍友毕业3年后的聚会&#xff0c;感慨良多。 从2019年至今&#xff0c;这已经是毕业的第3个年头了。小H的寝室大多来自五湖四海&#xff0c;毕业后&#xff0c;能够相聚的时间也少之又少&#…

Android -- 每日一问:如何设计一个照片上传 app ?

经典回答 把自己放在一个面试官的角度&#xff0c;自己先实现一次这个 App &#xff0c;然后自己总结一下你在这次实现中需要哪些能力、需要注意哪些事项。最后&#xff0c;再回过头来看&#xff0c;如果你是面试官&#xff0c;你希望面试者怎么回答才算是符合你的标准的&…

el-table 列的动态显示与隐藏

目录 业务场景 官方链接 实现效果图 使用框架 代码展示 template代码 ①、为什么要给el-table绑定【:key"reload"】&#xff1f; ②、为什么给每个绑定【key"Math.random()"】呢&#xff1f; ③、为什么列改变之后要添加【reload Math.random();…

【HarmonyOS】调测助手安装失败10内部错误

关于鸿蒙开发通过应用调测助手向watch gt 3 手表安装hap时报错。 问题背景&#xff1a; 鸿蒙开发&#xff0c;使用新建工程的helloworld 没有其他修改&#xff0c;生成hap包。然后通过应用调测助手向watch gt 3 手表安装hap时提示 安装失败:10.内部错误。 Sdk&#xff1a; a…

Shiro之授权

授权 1、角色认证 在controller层创建接口 使用shiro中的注解RequiresRoles指定能访问的角色名称 /*** 登录认证角色*/ RequiresRoles("admin") GetMapping("/userLoginRoles") ResponseBody public String userLoginRoles(){System.out.println("…

54 线程最外层异常的处理

前言 之前在 kafka 消费者客户端的一个 case 中曾经看到了这样的了一个情况 我没有配置 "group.id", 然后 kafka 客户端抛出了 InvalidGroupIdException 然后 输出的日志信息 除了类型, 其他 什么都没有, 主要是 么有堆栈信息 这里 来大致看一下 这个问题, 以及…