政安晨:快速学会~机器学习的Pandas数据技能(二)(索引、选择与赋值)

小伙伴们,今天这篇文章里讲到的操作,专业的数据科学家每天都会执行这个动作数十次。你当然也可以做到!

概述

选择pandas DataFrame或Series中的特定值进行操作是几乎任何数据操作中的一个隐含步骤,因此在使用Python处理数据时,你需要首先学习如何快速有效地选择与你相关的数据点。

咱们在这一篇文章里还是使用我的另一篇文章数据文件(大家可以去我这篇文章里下载):

政安晨:快速学会~机器学习的Pandas数据技能(一)(建立与读数据)icon-default.png?t=N7T8https://blog.csdn.net/snowdenkeke/article/details/136076433大家准备好环境,跟我一切开始吧:

import pandas as pd
reviews = pd.read_csv("./melb_data.csv", index_col=0)
pd.set_option('display.max_rows', 5)

原生访问

本地Python对象提供了很好的数据索引方式。Pandas将所有这些特性都带了过来,这有助于使其易于开始使用。

考虑以下DataFrame(咱们接着上述代码执行):

reviews

政安晨的执行:

在Python中,我们可以通过将其作为属性访问来访问对象的属性。例如,一个“书籍”对象可能有一个标题属性,我们可以通过调用book.title来访问它。在pandas DataFrame中的列的工作方式与此类似。

因此,要访问reviews的Address属性,我们可以使用:

reviews.Address

大家千万注意啊,Python语言是大小写敏感的,所以数据中是什么字符就用什么字符来操作,不能忽略大小写。

如果我们有一个Python字典,我们可以使用索引([])运算符访问其值。我们可以对DataFrame中的列执行相同的操作:

reviews['Address']

这是从DataFrame中选择特定Series的两种方法。它们在语法上都是有效的,没有更多或更少有效的说法,但是索引操作符 [] 具有一个优点,它可以处理列名中带有保留字符的情况(例如,如果我们有一个国家省份列,reviews.country providence 将无法正常工作)。

难道pandas的Series不是看起来像一个高级字典吗?它确实很像,所以也不奇怪,为了深入到一个特定的值,我们只需要再次使用索引操作符 []:

reviews['Address'][0]

其实这种访问的方式已经过时了,下面警告为

FutureWarning: Series.getitem 将键视为位置已经过时。在将来的版本中,整数键将始终视为标签(与DataFrame的行为一致)。要通过位置访问值,请使用ser.iloc[pos]

索引操作符和属性选择器非常好用,因为它们的使用方式与 Python 生态系统中的其他部分完全一样。对于初学者来说,这使得它们易于上手和使用。然而,pandas 有自己的访问器操作符 loc 和 iloc。对于更高级的操作,你应该使用这些操作符。

基于索引的选择

Pandas索引有两种范例。

第一种是基于索引的选择: 根据数据在索引中的数值位置选择数据。 iloc遵循这种范例。

要选择DataFrame中的第一行数据,我们可以使用以下代码:

reviews.iloc[0]

政安晨执行:

无论是 loc 还是 iloc,都是行优先,列次之。这与我们在原生 Python 中的方式相反,原生 Python 是列优先,行次之。

这意味着获取行要稍微容易一些,而获取列要稍微困难一些。要使用 iloc 获取列,我们可以按照以下方式操作:

reviews.iloc[:, 0]

独立使用的冒号(:)运算符来自原生Python,表示“全部内容”。然而,当与其他选择器结合使用时,它可以用来表示一系列的值。例如,要仅选择第一行、第二行和第三行的列,我们可以这样做(这个是作用在第0列上的选择):

reviews.iloc[:3, 0]

或者,如果我们只想选择第二个和第三个条目,我们可以这样做:

reviews.iloc[1:3, 0]

也可以传递一个列表:

reviews.iloc[[0, 1, 2], 0]

最后,值得知道的是,可以在选择中使用负数。这将从值的末尾开始向前计数。所以例如,这是数据集的最后五个元素。

reviews.iloc[-5:]

基于标签的选择

基于标签的选择 属性选择的第二种范式是loc运算符所遵循的范式:基于标签的选择。在这种范式中,关键是数据索引值,而不是其位置。

例如,要获取数据中行标签为:Abbotsford,而列标签为Address的条目,我们现在可以这样做:

reviews.loc['Abbotsford', 'Address']

iloc在概念上比loc简单,因为它忽略了数据集的索引。当我们使用iloc时,我们将数据集视为一个大矩阵(一个列表的列表),我们需要按位置索引进入其中。相反,loc使用索引中的信息来完成其工作。由于数据集通常具有有意义的索引,通常使用loc更容易进行操作。

例如,以下操作使用loc更容易:

reviews.loc[:, ['Address', 'Price', 'Date']]

在选择使用loc和iloc之间的区别时

当在lociloc之间选择或切换时,有一个要记住的要点,就是这两种方法使用稍微不同的索引方案。

iloc使用Python标准库的索引方案,其中范围的第一个元素被包含在内,最后一个元素被排除在外。因此,0:10将选择条目0,...,9。而loc则是包含索引的。因此,0:10将选择条目0,...,10。

为什么会有这样的改变呢?

请记住,loc可以索引任何标准库类型,例如字符串。如果我们有一个包含索引值为“Apples”,“...”,“Potatoes”,“...”的DataFrame,我们想要选择“在Apples和Potatoes之间的所有字母水果选择”,那么使用df.loc['Apples':'Potatoes']会比使用df.loc['Apples', 'Potatoet'](t在字母表中在s之后)更加方便。

当DataFrame索引是一个简单的数字列表时,这会特别令人困惑,例如0,...,1000。在这种情况下,df.iloc[0:1000]将返回1000个条目,而df.loc[0:1000]将返回1001个条目!要使用loc获取1000个元素,您需要将索引范围减少一个,并请求df.loc[0:999]。

除此之外,使用loc的语义与使用iloc的语义相同。

操纵索引

基于标签的选择从索引中获取其能力。

关键是,我们使用的索引是可变的。我们可以根据需要以任何方式操作索引。

set_index()方法可以用来完成这个任务。

下面是当我们将索引设置为标题字段时会发生的事情:

reviews.set_index("Address")

咱们现在将地址栏设置成了索引列。

如果你能提出一个比当前索引更好的数据集指标,那么这种改变的方式将是非常有用的。

条件选择

到目前为止,我们一直在使用DataFrame本身的结构属性对各种数据进行索引。然而,为了对数据进行有趣的操作,我们经常需要根据条件提出问题。

例如,假设我们特别关注房间与房价的情况。

我们可以先检查房间数量(是否2间):

reviews.Rooms == '2'

这个操作基于每条记录的房间数量是否为2间产生了一个True / False布尔值的Series。

赋值数据

将数据分配给DataFrame很容易,您可以分配一个常量值:

reviews['critic'] = 'everyone'
reviews['critic']

政安晨执行:

或者使用一个可迭代的值:

reviews['index_backwards'] = range(len(reviews), 0, -1)
reviews['index_backwards']

告一段落

现在您已经了解的Pandas数据操作的索引、选择和赋值,建立了这样的认识,就可以开展下一步的工作啦。

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

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

相关文章

怎么给《Cyberpunk 2077》制作功能性MOD

Cyberpunk的官方mod支持【REDmod】:https://www.cyberpunk.net/zh-cn/modding-support。官网有三个视频教程,其中第二集演示了脚本的替换,比较合程序员的胃口。 REDmod 是《赛博朋克 2077》的免费 DLC(须购买游戏之后才能下载&am…

【Java 数据结构】String进阶

字符串常量池 1. 创建对象的思考2. 字符串常量池(StringTable)3. 再谈String对象创建 1. 创建对象的思考 下面两种创建String对象的方式相同吗? public static void main(String[] args) {String s1 "hello";String s2 "hello";String s3 …

前端ajax技术

ajax可以实现局部刷新,也叫做无刷新,无刷新指的是整个页面不刷新,只是局部刷新,ajax可以自己发送http请求,不用通过浏览器的地址栏,所以页面整体不会刷新,ajax获取到后台数据,更新页…

计算机毕业设计 | SSM超市进销存管理系统(附源码)

1,绪论 1.1 开发背景 世界上第一个购物中心诞生于美国纽约,外国人迈克尔库伦开设了第一家合作商店,为了更好地吸引大量客流量,迈克尔库伦精心设计了低价策略,通过大量进货把商品价格压低,通过商店一次性集…

Nginx中logs的nginx.pid文件引发的问题

Nginx中logs的nginx.pid文件引发的问题 Q1:nginx: [error] CreateFile() "D:\software\nginx-1.22.1/logs/nginx.pid" failed (2: The system cannot find the file specified)Q2:nginx: [error] invalid PID number "" in "D:…

掌握虚拟化与网络配置之道:深入浅出VMware及远程管理技巧

目录 虚拟机介绍 虚拟机的关键字 服务器架构的发展 为什么用虚拟机VMware 虚拟机和阿里云的区别 功能角度 价格因素 应用场景 优势方面 找到windows的服务管理 配置VMware 关于VMware安装的几个服务 vmware如何修改各种网络配置 关于NAT的详细信息(了解) NAT(网…

Ribbon全方位解析:构建弹性的Java微服务

第1章 引言 大家好,我是小黑,咱们今天聊聊Ribbon,这货是个客户端负载均衡工具,用在Spring Cloud里面能让咱们的服务调用更加灵活和健壮。负载均衡,听起来挺高大上的,其实就是把外界的请求平摊到多个服务器上,避免某个服务器压力太大,其他的却在那儿闲着。 Ribbon的牛…

Netty连接通道中的Channel参数模型

ChannelOption(Channel中的连接参数) ChannelOption.SOBACKLOG ChannelOption.SO_BACKLOG对应的是tcp/ip协议listen函数中的backlog参数,服务端处理客户端连接请求是顺序处理的,所以同一时间只能处理一个客户端连接,多个客户端来的时候&…

传输层协议 ——— TCP协议

TCP协议 TCP协议谈谈可靠性为什么网络中会存在不可靠?TCP协议格式TCP如何将报头与有效载荷进行分离?序号与确认序号 确认应答机制(ACK)超时重传机制连接管理机制三次握手四次挥手 流量控制滑动窗口拥塞控制延迟应答捎带应答面向字…

使用ESP-01/ESP-01S接入Homekit远程控制电器

一、准备材料 ESP-01/ESP-01s 芯片 、 继电器模块 、 烧录器 二、下载固件和烧录软件 固件地址https://github.com/RavenSystem/esp-homekit-devices 烧录软件下载地址:https://drive.google.com/file/d/1_M4EzolaJWpYXts_FwUIqH8pZWqy-fye/view 三、烧录固件 …

【原创】Qt库open62541 MinGW编译

一、前言 为了统一公司的驱动层开发,准备采用OpcUA的方式转发底层数据,而服务器有Windows Server,也有CentOS,因此想用Qt开发一个基于MinGW的OpcUA Server,这样就能跨平台部署。这里记录一下,希望对你也有用…

神经网络 | 常见的激活函数

Hi,大家好,我是半亩花海。本文主要介绍神经网络中必要的激活函数的定义、分类、作用以及常见的激活函数的功能。 目录 一、激活函数定义 二、激活函数分类 三、常见的几种激活函数 1. Sigmoid 函数 (1)公式 (2&a…

问题:创业者在组建创业团队时,在个人特征和动机方面更应该注重创业者的( ) #知识分享#微信#媒体

问题:创业者在组建创业团队时,在个人特征和动机方面更应该注重创业者的( ) 参考答案如图所示

hook函数——useState

useState useState是React中的一个Hook函数,用于在函数组件中添加状态。基本使用语法如下: const [state, setState] useState(initialState) state:表示当前状态的值setState:更新状态的函数initialState:初始状态…

为什么是0.1uF电容?

旁路电容是电子设计中常用的电容器之一,主要用于过滤电源噪声和稳定电源电压。在实际应用中,0.1uF电容器是最常用的旁路电容值之一,那么为什么常用旁路电容是0.1uF而不是其他值?这个值又是怎么来的呢?本文将深入探讨这…

基于微信小程序的校园二手交易平台

博主介绍:✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇…

UDP 用户数据报协议

目录 1 UDP 1.1 UDP 的主要特点 1.1.1 UDP 是面向报文的 1.1.2 UDP 通信和端口号的关系 1.2 UDP 的首部格式 1.2.1 UDP 基于端口的分用 1.3 UDP抓包 1 UDP UDP 只在 IP 的数据报服务之上增加了一些功能: 1.复用和分用 2.差错检测 1.1 UDP 的主要特点 1.无连…

PSM-Net根据Stereo图像生成depth图像

一、新建文件夹 在KITTI数据集下新建depth_0目录 二、激活anaconda环境 conda activate pt14py37三、修改submission.py文件 3.1 KITTI数据集路径 parser.add_argument(--datapath, default/home/njust/KITTI_DataSet/00/, helpselect model)3.2 深度图像输出路径 save…

Vision Pro新机测评!“这才是MR硬件该有的模样!”

期盼很久的Vision Pro终于到了,小编迫不及待地体验了一把,效果相当非常震撼,操作非常丝滑,画面非常清晰…来不急解释了,快和小编一起来看一下吧~ 新机一到公司,为解大家对Vision Pro 的“相思之苦”&#x…

一篇文章理解时间复杂度和空间复杂度

今天也是很开心的学到了数据结构,也是打算把我自己对知识的理解给写出来了。第一篇数据结构开始咯。开始之前我们先理解一个概念。 什么是算法效率? 算法效率是指算法执行的速度或完成任务所需的资源(如时间和空间)的度量。它通…