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

目录

  • 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.mzph.cn/news/812593.shtml

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

相关文章

image with CV

""" 视觉:基本API应用(OPENCV) """ import cv2 import numpy as np"""图像读取方式3. 1.cv2.imread(filename or path, flags)flags0:灰度图像;flags1表示RGB图像;fl…

2024年mathorcup(妈妈杯)数学建模C题思路-物流网络分拣中心货量预测及人员排班

# 1 赛题 C 题 物流网络分拣中心货量预测及人员排班 电商物流网络在订单履约中由多个环节组成,图 ’ 是一个简化的物流 网络示意图。其中,分拣中心作为网络的中间环节,需要将包裹按照不同 流向进行分拣并发往下一个场地,最终使包裹…

《黑马点评》Redis高并发项目实战笔记(上)P1~P43

P1 Redis企业实战课程介绍 P2 短信登录 导入黑马点评项目 首先在数据库连接下新建一个数据库hmdp,然后右键hmdp下的表,选择运行SQL文件,然后指定运行文件hmdp.sql即可(建议MySQL的版本在5.7及以上): 下面这…

ArrayList部分底层源码分析

JDK版本为1.8.0_271,以插入和删除元素为例,部分源码如下: // 部分属性 transient Object[] elementData; // 底层数组 private int size; // 记录元素个数 private static final Object[] DEFAULTCAPACITY_EMPTY_ELEMENTDATA {}; // 空Obje…

物联网实战--驱动篇之(五)TEA和AES加密算法

目录 一、前言 二、TEA算法 三、AES算法 四、加解密测试 五、安全性保障 一、前言 物联网的安全性是经常被提及的一个点,如果你的设备之间通讯没有加密的话,那么攻击者很容易就能获取并解析出报文的协议,从而根据攻击者的需要进行设备操…

MongoDB的安装和使用

1.MongoDB 安装 1.1 基于Docker安装 docker run --restartalways -d --name mongo -v /opt/mongodb/data:/data/db -p 27017:27017 mongo:4.0.6 1.2 客户端工具使用 MongoDB Compass | MongoDB 2.MongoDB 使用 2.1 引用依赖包 <dependency><groupId>org.sprin…

信号完整性的常见术语概念(面试常用)

目录 术语 概念一览 1&#xff0e;信号完整性&#xff08;Signal Integrity&#xff09; 2&#xff0e;传输线&#xff08;Transmission Line&#xff09; 3&#xff0e;特性阻抗&#xff08;Characteristic Impedance&#xff09; 4&#xff0e;反射&#xff08;Reflecti…

【环境搭建】ubuntu工作站搭建全流程(显卡4090)

安装ubuntu22.04系统 首先&#xff0c;先压缩windows分区&#xff0c;按住Win X快捷键&#xff0c;选择磁盘管理,压缩分区&#xff0c;压缩出新的分区用于安装ubuntu22.04 windows插入系统盘&#xff0c;点击重启&#xff0c;一直按F12,选择系统盘启动方式语言选择chinese–…

[react优化] 避免组件或数据多次渲染/计算

代码如下 点击视图x➕1,导致视图更新, 视图更细导致a也重新大量计算!!这很浪费时间 function App() {const [x, setX] useState(3)const y x 2console.log(重新渲染, x, y);console.time(timer)let a 0for (let index 0; index < 1000000000; index) {a}console.timeE…

用ansys q3d提取pcb板上的寄生参数及注意事项

需求 画好pcb板后&#xff0c;想要提取回路的寄生参数 1 保存为ad格式 因为之前图方便用立创eda画的板子&#xff0c;结果无法导出成想要的格式。因此需要将立创eda的文件导出为ad格式。立创eda的官网有相关教程。 注意事项&#xff08;只说自己遇到的问题&#xff09; 导…

Ubuntu22.04 + ROS2 Humble的环境配置

Ubuntu22.04 ROS2 Humble的环境配置 文章目录 Ubuntu22.04 ROS2 Humble的环境配置(1) Set locale(2) Setup Sources(3)安装ROS2(4)检查是否成功安装 参考官方网站ROS2-Installation ROS2的各种版本及维护计划&#xff0c;可以参考ROS2-List of Distributions (1) Set locale…

Django中的静态文件、路径、访问静态文件的方法

1.什么是静态文件 不能与服务器端做动态交互的文件都是静态文件 如:图片,css,js,音频,视频,html文件(部分) 2.静态文件配置 在 settings.py 中配置一下两项内容: 1.配置静态文件的访问路径 通过哪个url地址找静态文件 STATIC_URL ‘/static/’ 说…

独一无二:探索单例模式在现代编程中的奥秘与实践

设计模式在软件开发中扮演着至关重要的角色&#xff0c;它们是解决特定问题的经典方法。在众多设计模式中&#xff0c;单例模式因其独特的应用场景和简洁的实现而广受欢迎。本文将从多个角度详细介绍单例模式&#xff0c;帮助你理解它的定义、实现、应用以及潜在的限制。 1. 什…

数据结构篇1—《顺序表》

文章目录 &#x1f6a9;前言1. 数据结构的概念2. 数据结构的分类3. 顺序表3.1. 顺序表的分类&#xff08;1&#xff09;静态顺序表&#xff08;2&#xff09;动态顺序表 4. 动态顺序表实现4.1. 实现步骤&#xff08;1&#xff09;框架结构&#xff08;2&#xff09;SeqList.h头…

如何准备2024年汉字小达人:18道历年考题示例和解析、备考提醒

现在距离2024年第11届汉字小达人比赛还有六个多月的时间&#xff0c;如何利用这段时间有条不紊地备考呢&#xff1f;我的建议是两手准备&#xff1a;①把小学1-5年级的语文课本上的知识点熟悉&#xff0c;重点是字、词、成语、古诗。阅读理解不需要。②把历年真题刷刷熟&#x…

linux如何使 CPU使用率保持在指定百分比?

目录 方法1&#xff1a;&#xff08;固定在100%&#xff09; 方法2&#xff1a;&#xff08;可以指定0~100%&#xff09; 方法3&#xff1a;使用ChaosBlade工具&#xff08;0~100%&#xff09; 方法1&#xff1a;&#xff08;固定在100%&#xff09; for i in seq 1 $(cat /pro…

vscode常用插件

1. chinese&#xff08;汉化编译器&#xff09; chinese插件适用于 VS Code 的中文&#xff08;简体&#xff09;语言包&#xff0c;此中文&#xff08;简体&#xff09;语言包为 VS Code 提供本地化界面。 2、vetur&#xff08;vue 2开发必备&#xff09;volar&#xff08;vu…

【Jenkins】Jenkins自动化工具介绍

目录 技术背景常规的手动打包步骤 Jenkins简介起源与发展Jenkins的核心价值1.自动化1.1代码构建1.2测试自动化1.3自动部署 2.持续集成与持续部署CI/CD的概念如何减少集成问题更快速地发布软件版本 Jenkins优势Jenkins的主要竞争对手Travis CI:CircleCI:GitLab CI: Jenkins与其他…

SpringBoot之集成Redis

SpringBoot之集成Redis 一、Redis集成简介二、集成步骤2.1 添加依赖2.2 添加配置2.3 项目中使用 三、工具类封装四、序列化 &#xff08;正常都需要自定义序列化&#xff09;五、分布式锁&#xff08;一&#xff09;RedisTemplate 去实现场景一&#xff1a;单体应用场景二&…

vim卡死了,没有反应怎么办?

解决办法&#xff1a; 很有可能是你有个在window下的好习惯&#xff0c;没事儿就ctrl s保存文件。但是在vim里&#xff0c;ctrl s默认是发送一种流控制信号&#xff0c;通常用于停止终端的输出&#xff0c;所以你的屏幕就卡死了。 解决办法也很简单&#xff0c;按下ctrl q即…