Pandas部分应掌握的重要知识点

news2025/1/10 1:32:42

目录

  • Pandas部分应掌握的重要知识点
    • 一、DataFrame数据框的创建
      • 1、直接基于二维数据创建(同时使用index和columns参数)
      • 2、基于excel文件中的数据来创建
    • 二、查看数据框中的数据和联机帮助信息
      • 1、查看特殊行的数据
      • 2、查看联机帮助的两种常见方法(help和?)
      • 3、查看总体统计情况
      • 4、根据指定行号或列号查看数据
      • 5、根据行标签或列标签查看数据
      • 6、根据给定条件查询数据
    • 三、对数据框进行增删改操作
      • 1、在数据框的尾部增加一列
      • 2、在尾部增加一行
      • 3、修改一列数据
      • 4、修改一行数据
      • 5、删除一列或多列数据
      • 6、删除一行数据
    • 四、数据框的合并
      • 1、merge合并
      • 2、concat合并
      • 3、join合并
    • 五、分组及相关计算
      • 1、分组及统计
      • 2、找到满足条件的分组(过滤掉不满足条件的分组)
    • 六、处理缺失值
      • 1、Pandas中缺失值的表示
      • 2、 与缺失值判断和处理相关的方法
      • 3、 填充缺失值


Pandas部分应掌握的重要知识点

import numpy as np
import pandas as pd

一、DataFrame数据框的创建

1、直接基于二维数据创建(同时使用index和columns参数)

scores=np.array([[97,93,86],
                 [95,97,88]])
pd.DataFrame(scores,index=['s01','s02'],columns=['数学','英语','语文'])

在这里插入图片描述

2、基于excel文件中的数据来创建

数据集team.xlsx下载地址:下载team.xlsx

team=pd.read_excel('team.xlsx')
team.head()

在这里插入图片描述

二、查看数据框中的数据和联机帮助信息

1、查看特殊行的数据

(1)查看前n行:head(n),不指定n时默认前5行。

team.head(3)

在这里插入图片描述

(2)查看后n行:tail(n),不指定n时默认后5行。

team.tail()

在这里插入图片描述

(3)随机抽样查看n行:sample(n),不指定n时默认抽样1行数据。

team.sample(2)

在这里插入图片描述

2、查看联机帮助的两种常见方法(help和?)

team.sample?
#也可以使用help(team.sample)查看帮助:
#help(team.sample)

3、查看总体统计情况

team.describe()   #技巧:输入des后按键盘的tab键可以实现命令补全

在这里插入图片描述

4、根据指定行号或列号查看数据

(1)通用写法:因为行号/列号是整数,所以需要使用.iloc位置索引器。索引器中括号内行列下标的位置上都允许使用切片和花式索引,下例中行使用切片,列使用花式索引。

注意:下面的3:5表示下标为3和4的两行,[0,2]表示下标为0和2的两列。

team.iloc[3:5,[0,2]]

在这里插入图片描述

(2)当只按行下标查看多个连续的行数据时,可以采用以下简化写法(不使用索引器):

team[10:13]

注意
① 该简化方法等价于team.iloc[10:13,:],但更推荐.iloc的写法,因为后者更通用;
② 该简化写法下,即使查看一行数据,也要使用切片的形式,例如:team[10:11]可以查看下标为10的行。

在这里插入图片描述

5、根据行标签或列标签查看数据

(1)通用方法:因为行标签或列标签通常是字符串,所以需要使用.loc标签索引器。索引器中括号内行列下标的位置上都允许使用切片和花式索引,下例中行使用切片,列使用花式索引。

注意:下面的3:4表示行标签为3和4的两行,["name","Q1"]表示列标签为"name"和"Q1"的两列。

team.loc[3:4,["name","Q1"]]

在这里插入图片描述

特别提醒,虽然上述两种通用写法的输出相同,但原理不同:
iloc索引器的切片不包含终值,所以team.iloc[3:5,[0,2]]中不包含下标为5的行;
loc索引器的切片却包含终值,所以team.loc[3:4,[0,2]]中却包含行标签为4的行;
③ 同样是整数,在iloc索引器中将被解读为行/列下标,而在loc索引器中将被解读为行/列标签。

(2)当只涉及到按列标签查看数据时,可以使用下列简化方法(不使用索引器):

print(team['team'].unique())   #按列标签选择一列
team[['name','Q1']].head(3)    #按列标签选择多列,使用花式索引的形式

在这里插入图片描述

补充说明:使用.ilocloc索引器的通用写法适用性更广泛,因此掌握通用写法是基本要求,在此基础上最好能掌握基于列标签的简化写法,因为这种写法也比较常见

6、根据给定条件查询数据

实现要领有两个:
① 因为多数条件都会涉及列标签,因此都要使用loc索引器(而非iloc索引器);
② 因为通常是寻找满足条件的行,所以索引器内部需要在行的维度上表达查询条件。

即查询条件写在行索引处(英文逗号左侧),而需要的列写在列索引处(逗号右侧)。

(1)以下是查询第一季度销售额大于90的人员姓名:

team.loc[team['Q1']>90,'name']
#与上面等价但不推荐的写法:
#team[team['Q1']>90]['name']

在这里插入图片描述

(2)查询姓名以字母’M’开头的人前两个季度的销售情况:

此处用到了Series对象的str属性的相关方法:关于Series对象的str属性的介绍

team.loc[team['name'].str.startswith('M'),['name','Q1','Q2']]

在这里插入图片描述

#通过set_index函数可以把name列作为新的行标签
if team.index.name!='name':
    team.set_index("name",inplace=True)
#再次查询姓名以字母'M'开头的人四个季度的销售情况:
team.loc[team.index.str.startswith('M'),'Q1':'Q4']

在这里插入图片描述

三、对数据框进行增删改操作

1、在数据框的尾部增加一列

df = pd.DataFrame({'employee': ['Bob', 'Jake', 'Lisa', 'Sue'],
                    'group': ['Accounting', 'Engineering', 'Engineering', 'HR']})
print("增加性别列之前:\n",df)
sex_value=pd.Series(['M','M','F','F'])
salary_value=[6000,5000,4000,3000]
#在尾部增加一列:采用赋值法
df['sex']=sex_value
df['salary']=salary_value
print("增加性别和工资列之后:")
df

在这里插入图片描述

2、在尾部增加一行

注意:此处只能使用loc索引器(使用iloc会出现索引越界的提示)。

索引器中的len(df)是想把当前数据框的长度作为新增加行的行标签。

df.loc[len(df),:]=['Mike','Guarding','M',2000]
print("在尾部增加一行之后:")
df

在这里插入图片描述

3、修改一列数据

修改一列数据仍采用对列进行赋值操作的形式。下面把性别列的值都设置为"Unknown"

new_sex=len(df)*["Unknown"]
print(new_sex)
df['sex']=new_sex
print("修改性别列之后:")
df

在这里插入图片描述

4、修改一行数据

可以使用loc索引器结合赋值操作来修改:

下面把标签为2的那行数据修改为["Rose","Sales","Female"]

df.loc[2,:]=["Rose","Sales","Female",3500]
print("修改标签为2的行之后:")
df

5、删除一列或多列数据

使用drop函数,并且指定axis=1才能删除列。

如果要删除多列,则要结合标签的花式索引形式:

df.drop(['sex','salary'],axis=1,inplace=True)   #inplace=True表示原地修改,即修改的结果直接作用于当前对象
print("删除性别和工资列之后:")
df

在这里插入图片描述

6、删除一行数据

使用drop函数,默认是删除行(axis=0是默认值)。

以下是删除标签为4的行:

df.drop(4,inplace=True)
print("删除标签为4的行之后:")
df

在这里插入图片描述

说明:可以通过?或help来查看以上操作函数的参数,例如df.drop?可以查看drop函数的相关帮助信息。

四、数据框的合并

问题:有两个数据框,如下图所示,现在期望将它们合并成如下图所示的效果,该如何做?

数据框df2:

在这里插入图片描述

数据框df3:

在这里插入图片描述

df2 = pd.DataFrame({'employee': ['Lisa', 'Bob', 'Jake', 'Sue'],
                    'hire_date': [2004, 2008, 2012, 2014]})
df2

在这里插入图片描述

df3 = pd.DataFrame({'employee': ['Bob', 'Jake', 'Lisa', 'Sue','Tom'],
                    'group': ['Accounting', 'Engineering', 'Engineering', 'HR',np.NaN]})
df3   #注意Tom目前没有所属部门

在这里插入图片描述

1、merge合并

merge主要基于列值匹配而进行列合并,类似于SQL中的连接操作。

df4_1=pd.merge(df3,df2)             #效果等价于how='right'
df4_1

在这里插入图片描述

df4_2=pd.merge(df3,df2,how='outer')    #效果等价于how='left'
df4_2

在这里插入图片描述

2、concat合并

df5=pd.concat([df3,df2])
df5

在这里插入图片描述

3、join合并

df6=df3.join(df2,lsuffix='_l', rsuffix='_r')
df6

在这里插入图片描述

小结:

  • concat默认的合并方式是行拼接,取并集(axis=0,join='outer')
  • merge默认的合并方式是基于列值进行列拼接,取交集(how='inner')
  • join默认的合并方式是基于行索引进行列合并,并且默认为左连接

五、分组及相关计算

1、分组及统计

针对team数据框,要求按’team’列统计各团队前两个季度的平均销售额:

方法1:先分组再选择列最后计算,推荐此种写法。

#注意本例中,选择两列时使用了花式索引()
team.groupby('team')[['Q1','Q2']].mean()

#如果如果只有一列,则无需使用花式索引,如下所示:
#team.groupby('team')['Q1'].mean()

在这里插入图片描述

方法2:先分组再计算最后选择列

#注意本例中,选择两列时使用了花式索引(如果只有一列,则无需使用花式索引)
team.groupby('team').mean()[['Q1','Q2']]

#如果如果只有一列,则无需使用花式索引,如下所示:
#team.groupby('team').mean()['Q1']

在这里插入图片描述

2、找到满足条件的分组(过滤掉不满足条件的分组)

现在要求找到前两个季度平均销售额都大于45的团队,显然这是一个对分组进行过滤的任务。

该任务可以分两步进行:

#(1)用filter函数得到满足所需条件的分组中的记录,它的结果是整个数据集的子集
flt_df=team.groupby('team').filter(lambda x: (x['Q1'].mean()>45) & (x['Q2'].mean()>45))

#(2)再对该子集重新进行一次分组汇总统计
flt_df.groupby('team')[['Q1','Q2']].mean()

补充说明:
filter函数用于对分组进行过滤(类似于SQL中的having子句)
filter函数返回满足过滤条件的分组中的记录,而不是满足条件的分组
③ 其参数必须是函数,本例中lambda函数的形参x代表每个分组
④ 当组对象存在多列时,filter的过滤条件要求显式的指定某一列

在这里插入图片描述

六、处理缺失值

1、Pandas中缺失值的表示

Pandas表示缺失值的一种方法是使用NaN(Not a Number),它是一个特殊的浮点数;另一种是使用Python中的None;Pandas会自动把None转变成NaN

data=pd.Series([1, np.nan, 'hello', None])
data

在这里插入图片描述

2、 与缺失值判断和处理相关的方法

  • isnull(): 判断每个元素是否是缺失值,会返回一个与原对象尺寸相同的布尔性Pandas对象
  • notnull(): 与isnull()相反
  • dropna(): 返回一个删除缺失值后的数据对象
  • fillna(): 返回一个填充了缺失值之后的数据对象

(1)判断是否含有缺失值:

data.isnull()

在这里插入图片描述

(2)统计一维的data中缺失值的个数:

data.isnull().sum()
2

(3)统计二维的df中缺失值的个数:

df = pd.DataFrame([[1,      np.nan, 2],
                   [2,      3,      5],
                   [np.nan, 4,      6]])
df.isnull().sum().sum()  
2

(4)dropna默认删除任何包含缺失值的整行数据:

df.dropna()

在这里插入图片描述

(5)使用axis=1axis='columns'删除任何包含缺失值的整列数据:

df.dropna(axis=1)

在这里插入图片描述

(6)更精确的缩小删除范围,需要使用howthresh(阈值)参数。只有全为空值的列才会被删除。

df.dropna(axis='columns', how='all')

在这里插入图片描述

3、 填充缺失值

(1)用单个值填充,下面的例子使用0来填充缺失值:

df.fillna(0)

在这里插入图片描述

(2)从前向后填充(forward-fill):

df.fillna(method='ffill')

在这里插入图片描述

(3)从后向前填充(back-fill):

df.fillna(method='bfill')

在这里插入图片描述

(4)插值法填充

下面的示例:线性插值、沿着水平方向从前向后填充。填充的方向默认是axis=0,即垂直方向填充;如果希望水平方向填充,需要设置axis=1

df.interpolate(method='linear', limit_direction='forward', axis=1)

在这里插入图片描述

(5)上面的方法都不是原地修改原对象,如果需要原地修改,则需要设置inplace=True

print(df)
df.interpolate(method='linear', limit_direction='forward', axis=1,inplace=True)
df

在这里插入图片描述

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

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

相关文章

Harbor镜像仓库报错“Harbor被设置为只读模式,在此模式下,不能删除仓库、标签及推送镜像。”

由于Harbor镜像仓库空间不足,今天扩容的磁盘空间,扩容前做了垃圾清理操作,然后直接停止了服务。估计清理任务没完成,导致服务启动后Harbor被设置为只读模式,无法使用。下面是解决方法。 1、报错信息: “Ha…

【Linux】基础IO----理解缓冲区

> 作者:დ旧言~ > 座右铭:松树千年终是朽,槿花一日自为荣。 > 目标:理解缓冲区 > 毒鸡汤:有些事情,总是不明白,所以我不会坚持。早安! > 专栏选自:Linux初阶 > 望…

开源模型应用落地-chatglm3-6b-zero/one/few-shot-入门篇(五)

一、前言 Zero-Shot、One-Shot和Few-Shot是机器学习领域中重要的概念,特别是在自然语言处理和计算机视觉领域。通过Zero-Shot、One-Shot和Few-Shot学习,模型可以更好地处理未知的情况和新任务,减少对大量标注数据的依赖,提高模型的…

Gradle 实战 - 检查不用包 -ApiHug准备-工具篇-010

🤗 ApiHug {Postman|Swagger|Api...} 快↑ 准√ 省↓ GitHub - apihug/apihug.com: All abou the Apihug apihug.com: 有爱,有温度,有质量,有信任ApiHug - API design Copilot - IntelliJ IDEs Plugin | Marketplace ApiHug …

《架构风清扬-Java面试系列第21讲》什么是线程的优先级?在Java中如何设置线程的优先级?

各位小伙伴早上好! 谢谢你的关注!也欢迎来加入我主导的知识星球,更多干货,提高你的面试准备效率! 敢承诺三天内不满意,可以直接退出! 这道题,属于面试热场的题目,我是不…

CentOS如何做端口映射?

在今天的技术发展中,越来越多的应用需要跨越网络进行远程管理和控制。为了实现这一目标,端口映射技术被广泛应用于各个领域。其中,【天联】作为一种性能稳定、安全可靠的端口映射工具,在各种应用场景中得到了广泛的应用和认可。 结…

SAM功能改进VRP-SAM论文解读VRP-SAM: SAM with Visual Reference Prompt

现已总结SAM多方面相关的论文解读,具体请参考该专栏的置顶目录篇 一、总结 1. 简介 发表时间:2024年3月30日 论文: 2402.17726.pdf (arxiv.org)https://arxiv.org/pdf/2402.17726.pdf代码: syp2ysy/VRP-SAM (github.com)htt…

模板进阶 | 非类型模板参数 | 类模板的特化 | 模板的分离编译 | 模板的优缺点

非类型模板参数 我们可以认为非类型模板参数就是一个常量&#xff0c;在我们的类里面我们是不能对它进行改造 为什么会有这样的场景&#xff0c;其次就是C语言那里我们一般使用什么。 场景1 #include<iostream> using namespace std;#define N 10 template<class T…

基于springboot仿雀语的文档管理系统

项目介绍 本项目借鉴了雀语的一些UI设计&#xff0c;实现了文档在线管理的功能&#xff0c;知识库可以对不同分类的文档建立不同的库&#xff0c;知识库里面左边可以维护菜单菜单目录&#xff0c;右边实现在线预览。该项目可以防止用户下载和复制文档&#xff0c;只支持在线预…

RK3568平台 SPI设备驱动

一.SPI简介 SPI是许多不同设备使用的常见通信协议。例如&#xff0c;SD卡模块、RFID读卡器模块和2.4GHz无线发射机/接收器均使用SPI与微控制器进行通信。 SPI是串行外设接口&#xff08;Serial Peripheral Interface)的缩写&#xff0c;是一种高速的&#xff0c;全双工&#x…

短视频转gif怎么做?三十秒在线转换gif

在现在这个快节奏的时代&#xff0c;gif动画相较于长时间的视频更受大众的欢迎。当我们需要将短视频、电影等视频制作成gif动画图片的时候就可以使用gif动画图片&#xff08;https://www.gif.cn/&#xff09;制作网站-GIF中文网&#xff0c;无需下载软件&#xff0c;手机、pc均…

零售行业数字化广告评价标准 - 《IAB/MRC零售(广告)测量指南》

IAB/MRC零售&#xff08;广告&#xff09;测量指南 --- 最新标准&#xff0c;2024年1月发布 目录 1出台此标准的目的是什么&#xff1f;2标准宗旨3本标准的主要关键领域4为什么这对品牌和零售商很重要5能给零售媒体中小型玩家带来什么机会&#xff1f;6评价零售媒体效果的最…

【JS】获取接口返回 EventStream 结构的数据(即接收读取 stream 流)

文章目录 EventStream 是一种服务器推送的数据格式&#xff0c;可以用于实时数据传输。 接口返回的示例图 获取示例&#xff1a; // 这里的 url 为虚拟的&#xff0c;仅供演示用 fetch(https://test.cn.com/api/agent/2, {method: POST,headers: {Content-Type: applicatio…

EaticSearch学习

ES学习目标 1、全文检索 2、ES介绍 2.1 安装&#xff08;docker&#xff09; docker pull elasticsearch:7.14.0 docker run -d -p 9200:9200 -p 9300:9300 -e "discovery.typesingle-node" elasticsearch:7.14.0初步检索 1、_cat GET /_cat/nodes&#xff1a;查看所…

RocketMQ安装部署+简单实战开发

文章目录 1.简介、安装部署2.Springboot集成RocketMQ2.1.添加maven依赖&#xff1a;2.2.RocketMQ配置生产者配置消费者配置 2.3.生产者&#xff08;发送消息&#xff09;2.4.消费者&#xff08;接收消息&#xff09; 3.实战结果3.1.消费者服务3.2.生产者服务3.3.运行日志生产日…

【SpringBoot】-- 使用minio对象存储服务实现上传图片

目录 一、安装minio 拉取镜像 启动 查看 进入登录页面 创建bucket 二、安装miniomc 三、代码 application.yml MinioUtil Controller 四、拓展 以下基于云服务和docker使用minio服务 一、安装minio Minio 是一个开源的对象存储服务器。它允许用户在私有云环境中建…

【vue】watch 侦听器

watch&#xff1a;可监听值的变化&#xff0c;旧值和新值 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><titl…

蓝桥杯嵌入式(G431)备赛——最后一晚查漏补缺

蓝桥杯嵌入式&#xff08;G431&#xff09;备赛笔记——初始化cubeMX 蓝桥杯嵌入式&#xff08;G431&#xff09;备赛笔记——LED 蓝桥杯嵌入式&#xff08;G431&#xff09;备赛笔记——按键模块设计 蓝桥杯嵌入式&#xff08;G431&#xff09;备赛笔记——LCD按键 蓝桥杯…

2023年度编程语言将花落谁家

2023年度编程语言将花落谁家 TIOBE的预测你预测年度最受欢迎的编程语言会是什么&#xff1f;TIOBE 认为 C# 最有可能成为年度编程语言&#xff0c;你同意吗&#xff1f;为什么&#xff1f;AI时代已经到来&#xff0c;你有学习新语言的打算吗&#xff1f; 以下是来自年度编程语言…

Android 纵向双选日历

这个日历的布局分两部分&#xff0c;一部分是显示星期几的LinearLayout&#xff0c;另外就是一个RecyclerView&#xff0c;负责纵向滚动了。 工具类&#xff1a; implementation com.blankj:utilcode:1.17.3上activity_calendar代码&#xff1a; <?xml version"1.0&…