当前位置: 首页 > news >正文

【Pandas操作2】groupby函数、pivot_table函数、数据运算(map和apply)、重复值清洗、异常值清洗、缺失值处理

1 数据清洗

#### 概述数据清洗是指对原始数据进行处理和转换,以去除无效、重复、缺失或错误的数据,使数据符合分析的要求。#### 作用和意义- 提高数据质量:- 通过数据清洗,数据质量得到提升,减少错误分析和错误决策。
- 增加数据可用性:- 清洗后的数据更加规整和易于使用,提高数据的可用性和可读性。## 清洗维度- 缺失值处理:- 对于缺失的数据,可以删除包含缺失值的行或列或者填充缺失值。
- 重复值处理:- 识别和删除重复的数据行,避免重复数据对分析结果产生误导。
- 异常值处理:- 检测和处理异常值,决定是删除、替换或保留异常值。## 缺失值清洗##### 缺失值/空值的删除- 伪造缺失值数据
import pandas as pd
from pandas import DataFrame, Seriesdf = pd.read_csv('./data/none.csv', index_col=0)
df  # NaN就是None空白

在这里插入图片描述

  • 缺失值的检测和删除,相关方法:
    • isnull():检测df中的每一个元素是否为空值,为空则给该元素返回True,否则返回False
    • notnull():检测df中的每一个元素是否为非空值,为非空则给该元素返回True,否则返回False
    • any():检测一行或一列布尔值中是否存在一个或多个True,有则返回True,否则返回False
    • all():检测一行或一列布尔值中是否存全部为True,有则返回True,否则返回False
    • dropna():将存在缺失值/空值的行或者列进行删除
# 检测哪些列中存在控制
df.isnull()

在这里插入图片描述

# 检测非空值
df.notnull()

在这里插入图片描述

# 可以判断哪些列存在控制
# axis=0表示针对列进行any操作
# axis=1表示针对行进行any操作
df.isnull().any(axis=0)

在这里插入图片描述

df.notnull().all(axis=0)

在这里插入图片描述

  • dropna()进行空值检测和过滤
# 直接返回删除空值对应后的结果,不会直接改变原始数据
df.dropna()

在这里插入图片描述

  • 计算df中每一列存在缺失值的个数和占比
for col in df.columns:# 满足该条件则表示第col列中存在空值if df[col].isnull().sum() > 0:# 求出该列空值的个数null_count = df[col].isnull().sum()# 求出该列中空值的占比:  空值的数量/列的总元素个数p = format(null_count / df[col].size, '.2%')print(col, null_count, p)

在这里插入图片描述

  • 使用任意值填充空值
# 如果想应用于原始数据,就加上inplace=True
df.fillna(value=666)

在这里插入图片描述

  • 使用近邻值填充空值
# 在竖直方向上,会用空值前面的值填充空值  ffill前值填充 
df.fillna(axis=0, method='ffill').fillna(axis=0, method='bfill')  # bfill后值填充

在这里插入图片描述

  • 使用相关的统计值填充空值
# 可以空值列的均值、中位数、方差等统计指标对空值进行填充
for col in df.columns:if df[col].isnull().sum() > 0:# 计算出空值对应的均值mean_value = df[col].mean()df[col].fillna(value=mean_value, inplace=True)
df

在这里插入图片描述
注意:实现空值的清洗最好选择删除的方式,如果删除的成本比较高,再选择填充的方式。

2 重复值清洗

  • 伪造重复行的数据源
df = pd.read_csv('data/repeat.csv', index_col=0)
df

在这里插入图片描述

  • 使用duplicated()方法检测重复的行数据
df.duplicated().sum() # 2
  • 使用drop_duplicates()方法检测且删除重复的行数据
df.drop_duplicates()

在这里插入图片描述

3 异常值清洗

异常值是分析师和数据科学家常用的术语,因为它需要密切注意,否则可能导致错误的估计。
简单来说,异常值是一个观察值,远远超出了样本中的整体模式。

异常值在统计学上的全称是疑似异常值,也称作离群点,异常值的分析也称作离群点分析。
异常值是指样本中出现的“极端值”,数据值看起来异常大或异常小,其分布明显偏离其余的观测值。
异常值分析是检验数据中是否存在不合常理的数据。

  • 给定条件的异常数据处理
    • 自定义一个1000行3列(A,B,C)取值范围为0-1的数据源,然后将C列中的值大于其两倍标准差的异常值进行清洗
data = pd.read_csv('./data/outlier.csv', index_col=0)
data

在这里插入图片描述

# C列的2倍标准差
twice_std = data['C'].std() * 2
twice_std
# 判定异常值, 即值大于2倍的标准差
ex = data['C'] > twice_std
ex  # True表示异常值,False标志正常值

在这里插入图片描述

# 取出True对应的行数据 (异常值对应的行数据)
data.loc[ex]

在这里插入图片描述

# 提取异常值对应行数据的行索引
drop_index = data.loc[ex].index
drop_index

在这里插入图片描述

# 将异常值对应的行从数据表格中进行删除
data.drop(index=drop_index)

在这里插入图片描述

3 map映射

  • 给Series中的一组数据提供另外一种表现形式,或者说给其绑定一组指定的标签或字符串。
  • 创建一个df,两列分别是姓名和薪资,然后给其名字起对应的英文名,然后将英文的性别统一转换为中文的性别
dic = {'name': ['tom', 'jerry', 'alex', 'tom'],'salary': [10000, 20000, 15000, 21000],'gender': ['male', 'female', 'male', 'female']
}
df = pd.DataFrame(data=dic)
df

在这里插入图片描述

# 将性别使用中文来标志
sex_dic = {'male':'男','female':'女'
}# map可以根据gender这组数据中的每一个元素根据字典表示的关系进行映射
df['gender'] = df['gender'].map(sex_dic)
df

在这里插入图片描述

# 给每一个英文名起一个中文名
name_dic = {'tom': '张三','jerry': '李四','alex': '王五'
}
df['e_name'] = df['name'].map(name_dic)
df

在这里插入图片描述

4 数据运算

map函数对Series数据的运算处理(map作为Series的运算工具)

  • 超过3000部分的钱缴纳50%的税,计算每个人的税后薪资
def after_sal(s):  # 此处s参数表示每一个薪资的数据# 该函数的调用次数取决于salary列中元素的个数return s - (s - 3000) * 0.5df['after_sal'] = df['salary'].map(after_sal)
df

在这里插入图片描述

# 改为匿名函数
df['salary'].map(lambda s: s - (s - 3000) * 0.5)

在这里插入图片描述

dic = {'name': ['tom', 'jerry', 'alex', 'tom'],'salary': [10000, 20000, 15000, 21000],'gender': ['male', 'female', 'male', 'female'],'hire_date': ['2020-01-10', '2021-11-11', '2022-12-12','2023-01-19',]
}
df = pd.DataFrame(data=dic)
df

在这里插入图片描述

# 将每一个员工的入职日期 +2 年
# 将 'hire_date' 转换为日期格式并加上2年
df['hire_date'] = pd.to_datetime(df['hire_date'])
df['hire_date_now'] = df['hire_date'].map(lambda x: x + pd.DateOffset(years=2))
df

在这里插入图片描述

dic = {'name': ['tom', 'jerry', 'alex', 'tom'],'salary': [10000, 20000, 15000, 21000],'gender': ['male', 'female', 'male', 'female'],'hire_date': ['2020-01-10', '2021-11-11', '2022-12-12','2023-01-19',]
}
df = pd.DataFrame(data=dic)# 也可以使用函数
# 将每一个员工的入职日期 +2 年
def func(x):year, month, day = x.split('-')year = int(year) + 2return str(year)+'-'+month+'-'+day
df['hire_date'] = df['hire_date'].map(func)
df

在这里插入图片描述
提示:apply也可以像map一样充当运算工具,不过apply运算效率要远远高于map。
因此在数据量级较大的时候可以使用apply。

dic = {'name': ['tom', 'jerry', 'alex', 'tom'],'salary': [10000, 20000, 15000, 21000],'gender': ['male', 'female', 'male', 'female'],'hire_date': ['2020-01-10', '2021-11-11', '2022-12-12','2023-01-19',]
}
df = pd.DataFrame(data=dic)def func(x):year, month, day = x.split('-')year = int(year) + 2return str(year)+'-'+month+'-'+day
df['hire_date'] = df['hire_date'].apply(func)
df

在这里插入图片描述

5 数据分组

  • 数据分类处理的核心:
    • groupby()函数
    • groups属性查看分组情况
import pandas as pd
import warningswarnings.filterwarnings('ignore')df = pd.DataFrame({'item':['Apple','Banana','0range','Banana','0range','Apple'],'price':[4, 3, 3, 2.5, 4, 2],'color':['red','yellow','yellow','green','green','green'],'weight':[12,20,50,30,20,44]
})
df

在这里插入图片描述

# 计算每种水果的平均价格
df.groupby(by='item').groups  # groups查看分组的结果

在这里插入图片描述

mean_price = df.groupby(by='item')['price'].mean()
mean_price

在这里插入图片描述

# 将平均价格转为字典
dic = mean_price.to_dict()
dic

在这里插入图片描述

# 将水果的平均价格汇总到原始的数据中
df['mean_price'] = df['item'].map(dic)
df

在这里插入图片描述

# 计算不同颜色水果的最大重量
max_weight = df.groupby(by='color')['weight'].max()max_weight

在这里插入图片描述

dic = max_weight.to_dict()
df['color'].map(dic)

在这里插入图片描述

# 将不同水果的最大重量汇总到原始的数据中
df['max_weight'] = df['color'].map(dic)
df

在这里插入图片描述

# 计算每种水果最大价格和最低价格的差值
def func(x):  # 参数x:一组水果的所有价格return x.max() - x.min()df.groupby(by='item')['price'].transform(func)

在这里插入图片描述

  • agg实现对分组后的结果进行多种不同形式的聚合操作
# 求每种水果的最大和最小价格
df.groupby(by='item')['price'].agg(['max', 'min', 'mean', 'sum'])

在这里插入图片描述

6 透视表pivot_table函数

  • 对不同字段不同形式的聚合操作
# 计算每种水果的平均价格
# 参数index:表示分组的条件
# 参数values:表示对哪些字段进行聚合操作
# 参数aggfunc:用户指定聚合形式
df.pivot_table(index='item', values='price', aggfunc='mean')

在这里插入图片描述

# 计算不同颜色水果的最大、最小和平均重量
df.pivot_table(index='color', aggfunc={'weight': 'max', 'weight': 'min', 'weight': 'mean',})

在这里插入图片描述

# 计算不同颜色水果的最大、最小和平均重量
df.pivot_table(index='color', values='weight', aggfunc=['max', 'min', 'mean'])

在这里插入图片描述

相关文章:

【Pandas操作2】groupby函数、pivot_table函数、数据运算(map和apply)、重复值清洗、异常值清洗、缺失值处理

1 数据清洗 #### 概述数据清洗是指对原始数据进行处理和转换,以去除无效、重复、缺失或错误的数据,使数据符合分析的要求。#### 作用和意义- 提高数据质量:- 通过数据清洗,数据质量得到提升,减少错误分析和错误决策。…...

如何分辨IP地址是否能够正常使用

在互联网的日常使用中,无论是进行网络测试、网站访问、数据抓取还是远程访问,一个正常工作的IP地址都是必不可少的。然而,由于各种原因,IP地址可能无法正常使用,如被封禁、网络连接问题或配置错误等。本文将详细介绍如…...

Sqoop 数据迁移

Sqoop 数据迁移 一、Sqoop 概述二、Sqoop 优势三、Sqoop 的架构与工作机制四、Sqoop Import 流程五、Sqoop Export 流程六、Sqoop 安装部署6.1 下载解压6.2 修改 Sqoop 配置文件6.3 配置 Sqoop 环境变量6.4 添加 MySQL 驱动包6.5 测试运行 Sqoop6.5.1 查看Sqoop命令语法6.5.2 测…...

【数据结构】排序算法系列——希尔排序(附源码+图解)

希尔排序 算法思想 希尔排序(Shell Sort)是一种改进的插入排序算法,希尔排序的创造者Donald Shell想出了这个极具创造力的改进。其时间复杂度取决于步长序列(gap)的选择。我们在插入排序中,会发现是对整体…...

c++(继承、模板进阶)

一、模板进阶 1、非类型模板参数 模板参数分类类型形参与非类型形参。 类型形参即:出现在模板参数列表中,跟在class或者typename之类的参数类型名称。 非类型形参,就是用一个常量作为类(函数)模板的一个参数,在类(函数)模板中…...

【机器学习】从零开始理解深度学习——揭开神经网络的神秘面纱

1. 引言 随着技术的飞速发展,人工智能(AI)已从学术研究的实验室走向现实应用的舞台,成为推动现代社会变革的核心动力之一。而在这一进程中,深度学习(Deep Learning)因其在大规模数据处理和复杂问题求解中的卓越表现,迅速崛起为人工智能的最前沿技术。深度学习的核心是…...

WebLogic 笔记汇总

WebLogic 笔记汇总 一、weblogic安装 1、创建用户和用户组 groupadd weblogicuseradd -g weblogic weblogic # 添加用户,并用-g参数来制定 web用户组passwd weblogic # passwd命令修改密码# 在文件末尾增加以下内容 cat >>/etc/security/limits.conf<<EOF web…...

leetcode:2710. 移除字符串中的尾随零(python3解法)

难度&#xff1a;简单 给你一个用字符串表示的正整数 num &#xff0c;请你以字符串形式返回不含尾随零的整数 num 。 示例 1&#xff1a; 输入&#xff1a;num "51230100" 输出&#xff1a;"512301" 解释&#xff1a;整数 "51230100" 有 2 个尾…...

Python GUI入门详解-学习篇

一、简介 GUI就是图形用户界面的意思&#xff0c;在Python中使用PyQt可以快速搭建自己的应用&#xff0c;自己的程序看上去就会更加高大上。 有时候使用 python 做自动化运维操作&#xff0c;开发一个简单的应用程序非常方便。程序写好&#xff0c;每次都要通过命令行运行 pyt…...

QT5实现https的post请求(QNetworkAccessManager、QNetworkRequest和QNetworkReply)

QT5实现https的post请求 前言一、一定要有sslErrors处理1、问题经过2、代码示例 二、要利用抓包工具1、问题经过2、wireshark的使用3、利用wireshark查看服务器地址4、利用wireshark查看自己构建的请求报文 三、返回数据只能读一次1、问题描述2、部分代码 总结 前言 QNetworkA…...

vscode 使用git bash,路径分隔符缺少问题

window使用bash --login -i 使用bash时候&#xff0c;在系统自带的terminal里面进入&#xff0c;测试conda可以正常输出&#xff0c;但是在vscode里面输入conda发现有问题 bash: C:\Users\marswennaconda3\Scripts: No such file or directory实际路径应该要为 C:\Users\mars…...

F12抓包10:UI自动化 - Elements(元素)定位页面元素

​课程大纲 1、前端基础 1.1 元素 元素是构成HTML文档的基本组成部分之一&#xff0c;定义了文档的结构和内容&#xff0c;比如段落、标题、链接等。 元素大致分为3种&#xff1a;基本结构、自闭合元素&#xff08;self-closing element&#xff09;、嵌套元素。 1、基本结构&…...

android 删除系统原有的debug.keystore,系统运行的时候,重新生成新的debug.keystore,来完成App的运行。

1、先上一个图&#xff1a;这个是keystore无效的原因 之前在安装这个旧版本android studio的时候呢&#xff0c;安装过一版最新的android studio&#xff0c;然后通过模拟器跑过测试的demo。 2、运行旧的项目到模拟器的时候&#xff0c;就报错了&#xff1a; Execution failed…...

SQL入门题

作者SQL入门小白&#xff0c;此栏仅是记录一些解题过程 1、题目 用户访问表users&#xff0c;记录了用户id&#xff08;usr_id&#xff09;和访问日期&#xff08;log_date&#xff09;,求出连续3天以上访问的用户id。 2、解答过程 2.1数据准备 通过navicat创建数据&#xf…...

Python实战:实战练习案例汇总

Python实战&#xff1a;实战练习案例汇总 **Python世界系列****Python实践系列****Python语音处理系列** 本文逆序更新&#xff0c;汇总实践练习案例。 Python世界系列 Python世界&#xff1a;力扣题43大数相乘算法实践Python世界&#xff1a;求解满足某完全平方关系的整数实…...

zabbix之钉钉告警

钉钉告警设置 我们可以将同一个运維组的人员加入到同一个钉钉工作群中&#xff0c;当有异常出现后&#xff0c;Zabbix 将告警信息发送到钉钉的群里面&#xff0c;此时&#xff0c;群内所有的运维人员都能在第一时间看到这则告警详细。 Zabbix 监控系统默认没有开箱即用…...

《OpenCV计算机视觉》—— 对图片进行旋转的两种方法

文章目录 一、用numpy库中的方法对图片进行旋转二、用OpenCV库中的方法对图片进行旋转 一、用numpy库中的方法对图片进行旋转 numpy库中的 np.rot90 函数方法可以对图片进行旋转 代码实现如下&#xff1a; import cv2 import numpy as np# 读取图片 img cv2.imread(wechat.jp…...

Python 错误 ValueError 解析,实际错误实例详解 (一)

文章目录 前言Python 中错误 ValueError: No JSON object Could Be Decoded在 Python 中解码 JSON 对象将 JSON 字符串解码为 Python 对象将 Python 对象编码为 JSON 字符串Python 中错误 ValueError: Unsupported Pickle Protocol: 3Python 中的 Pickling 和 UnpicklingPython…...

[java][git]上传本地代码及更新代码到GitHub教程

上传本地代码及更新代码到GitHub教程 上传本地代码 第一步&#xff1a;去github上创建自己的Repository&#xff0c;创建页面如下图所示&#xff1a; 红框为新建的仓库的https地址 第二步&#xff1a; echo "# Test" >> README.md 第三步&#xff1a;建立g…...

react antd table expandable defaultExpandAllRows 不生效问题

原因&#xff1a;defaultExpandAllRows只会在第一次渲染时触发 解决方案&#xff1a;渲染前判断table 的datasource 数据是否已准备好 {pageList.length > 0 ? (<TablerowSelection{rowSelection}columns{columns}dataSource{pageList}style{{ marginTop: 24 }}pagina…...

CVPR 2025 MIMO: 支持视觉指代和像素grounding 的医学视觉语言模型

CVPR 2025 | MIMO&#xff1a;支持视觉指代和像素对齐的医学视觉语言模型 论文信息 标题&#xff1a;MIMO: A medical vision language model with visual referring multimodal input and pixel grounding multimodal output作者&#xff1a;Yanyuan Chen, Dexuan Xu, Yu Hu…...

以下是对华为 HarmonyOS NETX 5属性动画(ArkTS)文档的结构化整理,通过层级标题、表格和代码块提升可读性:

一、属性动画概述NETX 作用&#xff1a;实现组件通用属性的渐变过渡效果&#xff0c;提升用户体验。支持属性&#xff1a;width、height、backgroundColor、opacity、scale、rotate、translate等。注意事项&#xff1a; 布局类属性&#xff08;如宽高&#xff09;变化时&#…...

8k长序列建模,蛋白质语言模型Prot42仅利用目标蛋白序列即可生成高亲和力结合剂

蛋白质结合剂&#xff08;如抗体、抑制肽&#xff09;在疾病诊断、成像分析及靶向药物递送等关键场景中发挥着不可替代的作用。传统上&#xff0c;高特异性蛋白质结合剂的开发高度依赖噬菌体展示、定向进化等实验技术&#xff0c;但这类方法普遍面临资源消耗巨大、研发周期冗长…...

Python爬虫实战:研究feedparser库相关技术

1. 引言 1.1 研究背景与意义 在当今信息爆炸的时代,互联网上存在着海量的信息资源。RSS(Really Simple Syndication)作为一种标准化的信息聚合技术,被广泛用于网站内容的发布和订阅。通过 RSS,用户可以方便地获取网站更新的内容,而无需频繁访问各个网站。 然而,互联网…...

Vue2 第一节_Vue2上手_插值表达式{{}}_访问数据和修改数据_Vue开发者工具

文章目录 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染2. 插值表达式{{}}3. 访问数据和修改数据4. vue响应式5. Vue开发者工具--方便调试 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染 准备容器引包创建Vue实例 new Vue()指定配置项 ->渲染数据 准备一个容器,例如: …...

Python如何给视频添加音频和字幕

在Python中&#xff0c;给视频添加音频和字幕可以使用电影文件处理库MoviePy和字幕处理库Subtitles。下面将详细介绍如何使用这些库来实现视频的音频和字幕添加&#xff0c;包括必要的代码示例和详细解释。 环境准备 在开始之前&#xff0c;需要安装以下Python库&#xff1a;…...

Spring AI与Spring Modulith核心技术解析

Spring AI核心架构解析 Spring AI&#xff08;https://spring.io/projects/spring-ai&#xff09;作为Spring生态中的AI集成框架&#xff0c;其核心设计理念是通过模块化架构降低AI应用的开发复杂度。与Python生态中的LangChain/LlamaIndex等工具类似&#xff0c;但特别为多语…...

Web 架构之 CDN 加速原理与落地实践

文章目录 一、思维导图二、正文内容&#xff08;一&#xff09;CDN 基础概念1. 定义2. 组成部分 &#xff08;二&#xff09;CDN 加速原理1. 请求路由2. 内容缓存3. 内容更新 &#xff08;三&#xff09;CDN 落地实践1. 选择 CDN 服务商2. 配置 CDN3. 集成到 Web 架构 &#xf…...

云原生玩法三问:构建自定义开发环境

云原生玩法三问&#xff1a;构建自定义开发环境 引言 临时运维一个古董项目&#xff0c;无文档&#xff0c;无环境&#xff0c;无交接人&#xff0c;俗称三无。 运行设备的环境老&#xff0c;本地环境版本高&#xff0c;ssh不过去。正好最近对 腾讯出品的云原生 cnb 感兴趣&…...

R语言速释制剂QBD解决方案之三

本文是《Quality by Design for ANDAs: An Example for Immediate-Release Dosage Forms》第一个处方的R语言解决方案。 第一个处方研究评估原料药粒径分布、MCC/Lactose比例、崩解剂用量对制剂CQAs的影响。 第二处方研究用于理解颗粒外加硬脂酸镁和滑石粉对片剂质量和可生产…...