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

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

MDK平台 - Code, RO-data , RW-data, ZI-data详解

文章目录 1 . 前言2 . Code, RO-data , RW-data, ZI-data解析3 . RAM上电复位4 . 细节扩展5 . 总结 【全文大纲】 : https://blog.csdn.net/Engineer_LU/article/details/135149485 1 . 前言 MDK编译后,会列出Code, RO-data , RW-data, ZI-data,以下解析…

2024年会计、审计、财务与经济管理国际会议(ICAAFEM2024)

2024年会计、审计、财务与经济管理国际会议(ICAAFEM2024) 会议简介 2024年国际会计、审计、财务和经济管理会议(ICAAFEM2024)将在云南省昆明市举行。会议旨在为从事“会计、审计、财务、经济管理”研究的专家学者提供一个平台&am…

java快速幂算法

快速幂算法 参考视频(参考五角七边up大佬) 幂运算的介绍 幂运算是指将一个数自身乘以自身多次的运算,其表达式为 a n a^n an,其中 a a a 是底数, n n n 是指数。 快速幂解释 快速幂算法是一种用于快速计算幂运算的算法&…

easyui combobox下拉框组件输入检索全模糊查询

前引: easyui下拉组件(combobox),输入检索下拉内容,是默认的右模糊匹配,而且不支持选择。因业务要求需要做成全模糊查询,目前网上搜索有两种方案: 1.修改easyui源码,这个…

Windows联网状态工具TCPView

文章目录 TCPView命令行工具更多Sysinternals Suite工具 TCPView TCPView用于显示系统上所有 TCP 和 UDP 终结点的详细列表,包括本地和远程地址以及 TCP 连接的状态,界面如下。 列表的表头含义如下 表头含义表头含义Process name应用名称Process id进程…

STM32H7各块RAM的位置和作用

STM32H7各块RAM的位置和作用 RAM各块RAM的特性各块RAM的时钟问题RAM分配方案 摘抄于armfly-V7开发板bsp手册,仅供个人学习。 RAM 这个图可以方便识别总线所外挂的外设,共分为三个域:D1 Domain,D2 Domain 和 D3 Domain。 ◆ ITCM 和…

【Hello算法】 > 第 2 关 >数据结构 之 数组与链表

数据结构 之 数组与链表 1:Understanding data structures !——了解数据结构——1.1:Classification-分类-1.2:Type-类型- 2:Arrays are the bricks that make up the wall of data structures *——数组是组成数据结…

【Java核心能力】美团优选后端一面:Java 八股文相关内容

欢迎关注公众号(通过文章导读关注:【11来了】),及时收到 AI 前沿项目工具及新技术的推送! 在我后台回复 「资料」 可领取编程高频电子书! 在我后台回复「面试」可领取硬核面试笔记! 文章导读地址…

基于分布式鲁棒性的多微网电氢混合储能容量优化配置——1

Optimal configuration of multi microgrid electric hydrogen hybrid energy storage capacity based on distributed robustness A B S T R A C T 储能与微电网相结合是解决分布式风能、太阳能资源不确定性、降低其对大电网安全稳定影响的重要技术路径。随着分布式风电和太阳…

Web自动化测试进阶:网页中难点之等待机制 —— 强制等待,隐式等待

为什么要添加等待 避免页面未渲染完成后操作,导致的报错 经常会遇到报错:selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"xpath","selector":&q…

架构设计参考项目系列主题:新零售SaaS架构:客户管理系统架构设计

什么是客户管理系统? 客户管理系统,也称为CRM(Customer Relationship Management),主要目标是建立、发展和维护好客户关系。 CRM系统围绕客户全生命周期的管理,吸引和留存客户,实现缩短销售周期、降低销售成本、增加销售收入的目的,从而提高企业的盈利能力和竞争力。 …

java-spring 图灵 02 手写spring

01.idea中创建一个maven管理的空项目 02.模拟创建出spring容器类,这里叫wzpApplicationContext,创建的时候会自动加载配置类的数据 public class wzpApplicationContext {private Class configClass;public wzpApplicationContext(Class configClass) …

Selenium+TestNG学习笔记

------------------TestNG-------------------- 1.层级 suite -》test-》class-》method 建议层级 class对应一个测试用例,suite对应一个测试集 2. testNG中的PO模式 3.运行多个测试类的测试用例 通过suite来进行管理;suite在testNG中可以通过xml 来进行编写管理…

多媒体互动装置如何助力智慧城市展厅的信息化建设?

随着现代化科技技术的发展,智慧城市的建设概念与实施也日益成熟,其中智慧城市展厅便是用于展示智慧城市理念、技术和规划的重要平台,而应用在其中的多媒体互动装置,更是起着重要的作用,它们能够让观众更直观地了解和体…

浅述.Net中的Hash算法(顺带对称、非对称算法)

【写在前面】 对称加密算法(只有一个私钥,比如DES【不推荐】、AES); 非对称加密算法(公钥与私钥,比如RSA); Hash算法也称为散列函数算法,任意长度的数据都转换为固定长度的字符串&#xff08…

关闭 SPI 会导致 WRPERR 错误的问题分析

1. 引言 在 STM32 的应用中,SPI 算是用的比较多的外设了,也是单片机最常见外设之一。客户说它执行了关闭 SPI 的代码,竟然会导致 Flash 中的 WRPERR 标志置位,致使应用碰到一些问题。这就奇怪了,SPI 和内部 Flash 看起…

中仕公考:三支一扶期满后有编制吗?

三支一扶两年的期限到达之后,会自动获得编制吗? 完成三支一扶项目的服务期限后,参与人员必须通过正式的考试才能获得编制,而并不是期满后自动获得编制。但是,三支一扶服务期满人员在参加公务员考试中可依照其身份享受加分的优惠…

h5应用如何适配移动端(干货总结)

h5应用如何适配移动端总结 前言一、简单场景搭建二、从哪些方面进行适配?1.对html中的meta标签进行适配2.清除默认样式3.使用全局变量去控制采用css值4.绝对单位相对化 前端必备工具推荐网站(免费图床、API和ChatAI等实用工具): http://luckycola.com.cn/ 前言 H5应用的开发是…

基于springboot实现视频网站管理系统【项目源码+论文说明】计算机毕业设计

基于springboot实现视频网站管理系统演示 摘要 使用旧方法对视频信息进行系统化管理已经不再让人们信赖了,把现在的网络信息技术运用在视频信息的管理上面可以解决许多信息管理上面的难题,比如处理数据时间很长,数据存在错误不能及时纠正等问…

AndroidAutomotive模块介绍(一)整体介绍

前言 Android Automotive 是一个基本 Android 平台,可运行 IVI 系统中预安装的 Android 应用以及可选的第二方和第三方 Android 应用。 本系列文档将会系统的介绍 Android Automotive 的功能、架构、逻辑等。模块逻辑将从 应用api接口、系统服务、底层服务&#x…