Pandas理论与实战(二)

news2024/11/28 10:51:38

本文章续接上篇文章

目录

1.数据抽取

 1.1 抽取一行数据

 1.2 抽取多行数据

 1.3 抽取指定列数据

 1.4 抽取指定行、列数据

1.5 按指定条件抽取数据

 2、数据的增加、删除和修改

2.1 数据增加

 2.2 修改数据

2.3 删除数据


1.数据抽取

数据分析过程中,并不是所有的数据都是我们想要的,此时可以抽取部分数据,主要使用DataFrame对象的loc属性和iloc属性。

 对象的loc属性和iloc属性都可以抽取数据,区别如下

  • loc属性:以列名(columns)和行名(index)作为参数,当只有一个参数时,默认是行名,即抽取整行数据,包括所有列,如df.loc['A']
  • iloc属性:以行和列位置索引(即0,1,2,…)作为参数,0表示第1行,1表示第2行,以此类推。当只有一个参数时,默认是行索引,即抽取整行数据,包括所有列。如抽取第1行数据,df.iloc[0]

 1.1 抽取一行数据

抽取一行数据主要使用loc属性。例如,抽取一行名为“King”的考试成绩数据(包括所有列),程序代码如下:

data=[[109,119,98],[106,99,85],[108,110,104],[102,99]]
name=['King','Order','God','Dd']
columns=['语文','数学',"英语"]
df=pd.DataFrame(data=data,index=name,columns=columns)
print(df)
print(df.loc['King'])

 使用iloc属性抽取第1行数据,指定行索引即可,如df.iloc[0],输出结果同上图一样。

data=[[109,119,98],[106,99,85],[108,110,104],[102,99]]
name=['King','Order','God','Dd']
columns=['语文','数学',"英语"]
df=pd.DataFrame(data=data,index=name,columns=columns)
print(df)
print(df.iloc[0])

 1.2 抽取多行数据

 通过loc属性和iloc属性指定行名和行索引即可实现抽取任意多行数据。例如,抽取行名为“King”和“God”(即第1行和第3行数据)的考试成绩数据,可以使用loc属性,也可以使用iloc属性,其输出结果都是一样的,主要代码如下:

data=[[109,119,98],[106,99,85],[108,110,104],[102,99]]
name=['King','Order','God','Dd']
columns=['语文','数学',"英语"]
df=pd.DataFrame(data=data,index=name,columns=columns)
print(df)
print("--------------------")
print(df.iloc[[0,2]])
print("--------------")
print(df.loc[['King','God']])

 在loc属性和iloc属性中合理地使用冒号(:),即可抽取连续任意多行数据

print(df.iloc[0:2])#抽取第一行到第二行
print("--------------")
print(df.loc['King':'God'])#抽取King到God

print(df.loc[:'God':])#抽取第一行到God
print("-------------------")
print(df.iloc[1::])#抽取第二行到最后一行

 1.3 抽取指定列数据

抽取指定列数据,可以直接使用列名,也可以使用loc属性和iloc属性。

(1)使用列名

例如,抽取列名为“语文”和“数学”的考试成绩数据,程序代码如下:

data=[[109,119,98],[106,99,85],[108,110,104],[102,99]]
name=['King','Order','God','Dd']
columns=['语文','数学',"英语"]
df=pd.DataFrame(data=data,index=name,columns=columns)
print(df)
print("--------------------")
print(df[['语文','数学']])

 (2)使用loc属性和iloc属性

前面介绍loc属性和iloc属性均有两个参数:第一个参数代表行;第二个参数代表列。那么这里抽取指定列数据时,行参数不能省略。

下面使用loc属性和iloc属性抽取指定列数据,主要代码如下:

data=[[109,119,98],[106,99,85],[108,110,104],[102,99]]
name=['King','Order','God','Dd']
columns=['语文','数学',"英语"]
df=pd.DataFrame(data=data,index=name,columns=columns)
print(df)
print("--------------------")
print(df.loc[:,['语文','数学']])#抽取语文和数学

data=[[109,119,98],[106,99,85],[108,110,104],[102,99]]
name=['King','Order','God','Dd']
columns=['语文','数学',"英语"]
df=pd.DataFrame(data=data,index=name,columns=columns)
print(df)
print("--------------------")
print(df.loc[:,'语文':])#抽取从语文到最后一列

data=[[109,119,98],[106,99,85],[108,110,104],[102,99]]
name=['King','Order','God','Dd']
columns=['语文','数学',"英语"]
df=pd.DataFrame(data=data,index=name,columns=columns)
print(df)
print("--------------------")
print(df.iloc[:,[0,1]])#抽取第一列和第二列
print("--------------------")
print(df.iloc[:,:2])#连续抽取从第1列开始到第3列,但不包括第3列

 1.4 抽取指定行、列数据

抽取指定行、列数据主要使用loc属性和iloc属性,这两个方法的两个参数都指定就可以实现指定行、列数据的抽取。

使用loc属性和iloc属性抽取指定行、列数据,程序代码如下:

data=[[109,119,98],[106,99,85],[108,110,104],[102,99]]
name=['King','Order','God','Dd']
columns=['语文','数学',"英语"]
df=pd.DataFrame(data=data,index=name,columns=columns)
print(df)
print("--------------------")
print(df.loc['King','数学'])#抽取King的数学成绩
print("--------------------")
print(df.loc['King',['数学']])#抽取King的数学成绩
print("--------------------")
print(df.loc[['King'],['数学']])#抽取King的数学成绩

注意,在上述结果中,第一个输出结果是一个数,不是数据,是由于“df.loc['King','数学']”没有使用方括号[],导致输出的数据不是DataFrame类型。

data=[[109,119,98],[106,99,85],[108,110,104],[102,99]]
name=['King','Order','God','Dd']
columns=['语文','数学',"英语"]
df=pd.DataFrame(data=data,index=name,columns=columns)
print(df)
print("--------------------")
print(df.loc[['Order'],['语文','英语']])#抽取Order的语文和英语成绩
print("--------------------")
print(df.loc[['Order','Dd'],['语文','英语']])#抽取Order、Dd的语文和英语成绩

print(df.iloc[[1],[2]])#抽取第二行第三列
print("##################")
print(df.iloc[1,2])#抽取第二行第三列

data=[[109,119,98],[106,99,85],[108,110,104],[102,99]]
name=['King','Order','God','Dd']
columns=['语文','数学',"英语"]
df=pd.DataFrame(data=data,index=name,columns=columns)
print(df)

print("--------------------------")
print(df.iloc[1:,[2]])#抽取第二行到最后一行的第三列
print("##################")
print(df.iloc[1:,[0,2]])#抽取第二行到最后一行的第一、三列
print("-------------")
print(df.iloc[:,2])#所有行第3列

        语文  数学   英语
King    109   119   98.0
Order   106    99   85.0
God     108   110  104.0
Dd      102    99    NaN
--------------------------
        英语
Order   85.0
God    104.0
Dd       NaN
##################
       语文   英语
Order   106   85.0
God     108  104.0
Dd      102    NaN
-------------
King      98.0
Order     85.0
God      104.0
Dd         NaN
Name: 英语, dtype: float64

1.5 按指定条件抽取数据

DataFrame对象实现数据查询有以下3种方式。

例如,抽取语文成绩大于105,数学成绩大于80的数据,程序代码如下:

data=[[109,119,98],[106,99,85],[108,110,104],[102,99]]
name=['King','Order','God','Dd']
columns=['语文','数学',"英语"]
df=pd.DataFrame(data=data,index=name,columns=columns)
print(df)
print("========================")
print(df.loc[(df['语文']>105)&(df['数学']>80)])

 2、数据的增加、删除和修改

2.1 数据增加

DataFrame对象增加数据主要包括列数据增加和行数据增加。首先看一下原始数据

 (1)按列增加数据

按列增加数据,可以通过以下3种方式实现:

1、直接为DataFrame对象赋值

例如,增加一列“物理”成绩,程序代码如下:

data=[[109,119,98],[106,99,85],[108,110,104],[102,99,80]]
name=['King','Order','God','Dd']
columns=['语文','数学',"英语"]
df=pd.DataFrame(data=data,index=name,columns=columns)
print(df)
df['物理']=[90,89,87,99]
print(df)

 2、使用loc属性在DataFrame对象的最后增加一列

使用loc属性在DataFrame对象的最后增加一列。例如,增加“物理”一列,主要代码如下:

data=[[109,119,98],[106,99,85],[108,110,104],[102,99,80]]
name=['King','Order','God','Dd']
columns=['语文','数学',"英语"]
df=pd.DataFrame(data=data,index=name,columns=columns)
print(df)
print("-------------")
# df['物理']=[90,89,87,99]
df.loc[:,'物理']=[90,89,87,99]
print(df)

 3、在指定位置插入一列

在指定位置插入一列,主要使用insert()方法。例如,在第1列后面插入“物理”,其值为wl的数值,主要代码如下:

wl=[90,89,87,99]
df.insert(1,'物理',wl)
print(df)

 (2)按行增加数据

按行增加数据,可以通过以下两种方式实现。

1.增加一行数据

增加一行数据主要使用loc属性实现。例如,在成绩表中增加一行数据,即“wyy”同学的成绩,主要代码如下:

df.loc['wyy']=[100,109,98]
print(df)

 2.增加多行数据

增加多行数据主要使用字典结合append()方法实现。例如,在原有数据中增加“wyy”“wxx”“alan”同学的考试成绩,主要代码如下:

df_insert=pd.DataFrame(
    {
        '语文':[100,109,101],
        '数学':[103,113,93],
        '英语':[92,97,99]
    },
    index=['wyy','wxx','alan']
)
df=df.append(df_insert)
print(df)

 2.2 修改数据

修改数据包括行、列标题和数据的修改,首先看一下原始数据。

 (1)修改列标题

修改列标题主要使用DataFrame对象的cloumns属性,直接赋值即可。

例如,将“数学”修改为“数学(上)”,主要代码如下:

df.columns=['语文','数学(上)','英语']
print(df)

 上述代码中,即使只修改“数学”为“数学(上)”,但是也要将所有列的标题全部写上;否则将报错。

有例如,修改多个学科的列名。将“语文”修改为“语文(上)”、“数学”修改为“数学(上)”、“英语”修改为“英语(上)”,主要代码如下:

df.rename(columns={'语文':'语文(上)','数学':'数学(上)','英语':'英语(上)'},inplace=True)
print(df)

 上述代码中,参数inplace为True,表示直接修改df;否则,不修改df,只返回修改后的数据。

 (2)修改行标题

修改行标题主要使用DataFrame对象的index属性,直接赋值即可。

例如,将行标题统一修改为数字编号。

df.index=list('1234')
print(df)

 使用DataFrame对象的rename()方法也可以修改行标题。例如,将行标题统一修改为数字编号,主要代码如下:

df.rename({'King':1,'Order':2,'God':3,'Dd':4},axis=0,inplace=True)
print(df)

 (3)修改数据

 修改数据主要使用DataFrame对象的loc属性和iloc属性。

1.修改整行数据。例如,例如,修改“King”同学的各科成绩,主要代码如下:

df.loc['King']=[100,100,100]
print(df)
print("-------------------")
df.loc['King']=df.loc['King']#各科成绩均加10分
print(df)

 2.修改整列数据

例如,例如,修改所有同学的“语文”成绩,主要代码如下:

df.loc[:,'语文']=[109,103,108,98]
print(df)

 3.修改某一数据

例如,修改“King”同学的“语文”成绩,主要代码如下:

df.loc['King','语文']=90
print(df)

 4.使用iloc属性修改数据

通过iloc属性指定行、列位置实现修改数据,主要代码如下:

df.iloc[0,0]=115#修改第一行第一列数据
df.iloc[:,0]=[117,107,103,99]#修改第一列数据
df.iloc[0,:]=[100,100,100]#修改第一行数据

2.3 删除数据

删除数据主要使用DataFrame对象的drop()方法。语法如下

DataFrame.drop(labels=None, axis=0, index=None, columns=None, level=None, inplace=False, errors='raise')

  • labels:表示行标签或列标签。
  • axis:axis = 0,表示按行删除;axis = 1,表示按列删除。默认值为0,即按行删除。
  • index:删除行,默认值为None。
  • columns:删除列,默认值为None。
  • level:针对有两级索引的数据。level = 0,表示按第1级索引删除整行;level = 1表示按第2级索引删除整行,默认值为None。
  • inplace:可选参数,对原数组做出修改并返回一个新数组。默认值为False,如果值为True,那么原数组直接就被替换。
  • errors:参数值为ignore或raise,默认值为raise,如果值为ignore(忽略),则取消错误。 

(1) 除指定的学生成绩数据,主要代码如下:

#删除列名为'数学'的列
df.drop(['数学'],axis=1,inplace=True)
df.drop(columns='数学',inplace=True)
df.drop(labels='数学',axis=1,inplace=True)

df.drop(['God','Dd'],inplace=True)#删除多行
df.drop(index='King',inplace=True)#删除index为'King'的行
df.drop(labels='Order',axis=0,inplace=True)#删除标签为'Order'的行

(2)删除特定条件的行

删除满足特定条件的行,首先找到满足该条件的行索引,然后再使用drop()方法将其删除。

例如。删除“数学”成绩中等于110的行、“语文”成绩小于110的行,主要代码如下:

df.drop(index=df[df['数学'].isin([110])].index[0],inplace=True)
df.drop(index=df[df['语文']<110].index[0],inplace=True)

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

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

相关文章

CentOS 6 手动将OpenSSH升级到9.3

前言 收到通知说服务器组件存在漏洞 服务器版本:CentOS-6.8-x86_64 目前SSH版本:OpenSSH_5.3p1, OpenSSL 1.0.1e-fips 11 Feb 2013 前置操作 为了避免升级过程中出现的意外导致服务器无法进行连接,建议对重要的内容先进行备份 创建快照 在主机服务商那里为主机创建快照,防止最糟…

Android Studio无法打开问题解决记录

目录 1 问题起因2 发现问题3 解决问题 1 问题起因 问题的起因是我为了运行一个Kotlin项目&#xff0c;但是报了一个错误&#xff1a; Kotlin报错The binary version of its metadata is 1.5.1, expected version is 1.1.16 然后我就上百度去搜了以下&#xff0c;一篇博客让禁用…

GEE:多元线性回归

作者&#xff1a;CSDN _养乐多_ 本文记录了在NDVI、EVI和LAI作为自变量&#xff0c;precipitation作为因变量的条件下&#xff0c;使用linearRegression函数进行线性回归分析的代码&#xff0c;代码在Google Earth Engine&#xff08;GEE&#xff09;平台上实现。具体而言&am…

AI大数据智能视频融合平台EasyCVR新增Ehome黑白名单配置

EasyCVR视频融合平台基于云边端智能协同架构&#xff0c;具有强大的数据接入、处理及分发能力&#xff0c;平台支持海量视频汇聚管理&#xff0c;可支持多协议接入&#xff0c;包括市场主流标准协议与厂家私有协议及SDK&#xff0c;如&#xff1a;国标GB28181、RTMP、RTSP/Onvi…

Linux 学习记录50(QT篇)

Linux 学习记录50(QT篇) 本文目录 Linux 学习记录50(QT篇)一、基于QT的TCP客户端连接1. 代码实现2. 自制的客户端/服务器 二、QT数据库SQL1. QT将数据库分为三个层次2. 实现数据库操作的相关方法 思维导图练习1.2.3.4. 一、基于QT的TCP客户端连接 所需头文件 <QTcpSocket&g…

3G理论概述

文章目录 UMTS&#xff08;通用移动通信系统&#xff0c;Universal Mobile Telecommunications System&#xff09;UTRAN&#xff08;UMTS陆地无线接入网&#xff0c;UMTS Terrestrial Radio Access Network&#xff09;RNC&#xff08;无线网络控制器&#xff0c;Radio Networ…

music21 层级解析(了解次结构方可将任意曲谱与mid互相转换)

这段代码创建了一个音乐乐谱并将其保存为 MIDI 文件&#xff0c;其中包含一个乐器和多个小节。每个小节中包含四个音符或和弦&#xff0c;然后将小节添加到乐谱中。最后&#xff0c;将乐谱写入 MIDI 文件。 首先&#xff0c;通过导入 music21 库来使用它的功能。 import music2…

onvif库封装及qt工程调用onvif库实现设备搜索、获取码流地址等功能

一、前言&#xff1a; 本篇的OnvifManager工程是在vs2010下进行开发编译&#xff0c;它实现了对onvif库的封装调用&#xff0c;目前工程接口实现了对onvif的搜索、码流地址获取、设备重启接口&#xff0c;其他接口后续可以通过更改工程代码进行添加。qt工程myonvif是对OnvifMan…

Zotero翻译插件“zotero pdf translate”——使用时出现广告的问题的解决办法

一、背景&#xff1a; 在Zotero上安装了“zotero-pdf-translate”插件来辅助翻译。今天忽然发现&#xff0c;在使用CNKI翻译引擎的时候&#xff0c;末尾被加上了广告&#xff1a; (查看名企职位领高薪offer&#xff01;--->智联招聘https***dict.cnki.net/ad.html) 如下&…

【IMX6ULL驱动开发学习】16.睡眠机制_poll机制_fasync异步通知(按键控制LED)

学完了休眠唤醒机制、poll机制、异步通知、定时器、tasklet、工作队列、mmap、input子系统后&#xff0c;该沉淀沉淀了 一、睡眠机制 案例&#xff1a;APP程序读取按键值 - 睡眠机制&#xff08;阻塞或非阻塞&#xff09; 1.等待队列头创建 static DECLARE_WAIT_QUEUE_HEA…

从零实现深度学习框架——带Attentiond的Seq2seq机器翻译

引言 本着“凡我不能创造的,我就不能理解”的思想,本系列文章会基于纯Python以及NumPy从零创建自己的深度学习框架,该框架类似PyTorch能实现自动求导。 要深入理解深度学习,从零开始创建的经验非常重要,从自己可以理解的角度出发,尽量不使用外部完备的框架前提下,实现我…

【Windows】PowerToys - 微软超强生产力工具

Windows用户必看 - 电脑系统增强工具 下载 下载地址 简介 PowerToys 是一组由 Microsoft 创建和维护的开源实用工具集&#xff0c;旨在为 Windows 操作系统提供额外的功能和增强体验。它是为 Windows 10 及更高版本设计的&#xff0c;可帮助用户提高效率、个性化和定制化他们…

apache 安装配置 基础篇(三) 之 虚拟机

apache虚拟主机类型有两种 1、基于名称的虚拟主机 2、基于地址或IP地址的虚拟主机 基于名称的虚拟主机 ## httpd-vhosts.conf 添加如下代码&#xff0c; ## 同时要在httpd.conf中追加监听89端口 Listen 89 ## 修改apache 文件要 在bin路径下面的cmd 录入 httpd -t 检测 代…

centos7搭建postgresql主从(主备)架构

本篇介绍如何在centos7系统搭建一个postgresql主备集群实现最近的HA&#xff08;高可用&#xff09;架构。后续更高级的HA模式都是基于这个最基本的主备搭建。 节点规划 ip 主机名 用途 192.168.182.4 node1 主库&#xff08;读写&#xff09; 192.168.182.5 node2 备库&#…

大神都在用的4个AI绘画工具,记得收藏

AI绘画工具是一种利用人工智能辅助绘画创作的工具&#xff0c;它可以帮助设计师快速绘制高质量的艺术作品。本文列出了国内外4款免费的AI绘画工具&#xff0c;它们使用起来非常简单&#xff0c;而且创作效果非常不错&#xff0c;一起来看看吧&#xff01; 1.即时灵感 即时灵感…

【字符串 简单】LeetCode 14. 最长公共前缀 Java

我的思路&#xff1a; 给字符串数组按照字符串的长度从长到短排序&#xff0c;因为最长公共前缀最长的话&#xff0c;也只能是字符串数组中最短的那一个字符串设置一个index变量&#xff0c;表示当前正在检查字符数组中所有字符串的index位置循环遍历字符串数组n遍&#xff0c…

Java设计模式之结构型-桥接模式(UML类图+案例分析)

目录 一、基础概念 二、UML类图 三、角色分析 四、案例分析 1、支付方式 2、支付渠道 五、总结 一、基础概念 桥接模式&#xff08;Bridge Pattern&#xff09;是一种结构型设计模式&#xff0c;其主要目的是“将抽象部分与实现部分分离&#xff0c;使它们都可以独立地…

微信小程序扫码邀请,小程序码生成带参数

代码一&#xff1a; public String generateQRCode(String appId, String appSecret, String pagePath) throws IOException {String accessToken getAccessToken(appId, appSecret);String apiUrl "https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token&qu…

springboot家乡特色推荐系统

本次设计任务是要设计一个家乡特色推荐系统&#xff0c;通过这个系统能够满足家乡特色文章的管理功能。系统的主要功能包括首页&#xff0c;个人中心&#xff0c;用户管理&#xff0c;文章分类管理&#xff0c;文章分享管理&#xff0c;系统管理等。 管理员可以根据系统给定的账…