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

Pandas基础06(异常值的检测与过滤/抽样/常用聚合函数/数据聚合)

Pandas基础06 异常值的检测与过滤

在数据分析中,异常值(Outliers)是指与其他数据点显著不同的值。这些值可能由于数据录入错误、设备故障或极端情况而产生,因此在进行数据分析之前,需要对其进行检测与过滤。本文将介绍如何利用 Pandas 中的一些常见函数,检测、处理和过滤数据中的异常值,同时对数据进行基本的处理和探索。

3.5.1. describe():查看每一列的描述性统计量

describe() 函数是 Pandas 中最常用的查看数据分布的工具之一。它可以帮助我们了解每一列的基本统计信息,包括计数、均值、标准差、最小值、最大值以及四分位数等。通过这些信息,我们可以初步识别数据中的异常值。

import pandas as pd
import numpy as npdf = pd.DataFrame(np.random.randint(1, 100, (4, 3)), index=["zhangsan", "lisi", "wangwu", "zhouliu"], columns=["Chinese", "Math", "English"])# 查看描述性统计量
df.describe()

输出结果:

        Chinese    Math    English
count   4.000000  4.000000  4.000000
mean   85.750000  36.750000  25.250000
std    13.022417  26.474831  19.397165
min    74.000000  11.000000  7.000000
25%    74.750000  16.250000  9.250000
50%    85.500000  35.000000  25.500000
75%    96.500000  55.500000  41.500000
max    98.000000  66.000000  43.000000

通过 describe() 输出的统计数据,我们可以观察到各列的均值、标准差以及最大最小值。如果某一列的最小值或最大值显得非常偏离其他数据点,这可能意味着该列中有异常值。

3.5.2. info():查看数据信息

info() 函数可以帮助我们快速查看 DataFrame 的结构,包括行数、列数、每列的非空值数量以及数据类型等。这对于检查数据完整性和结构非常有用。

df.info()

输出结果:

<class 'pandas.core.frame.DataFrame'>:数据结构为DataFrame
Index: 4 entries, zhangsan to zhouliu:行索引
Data columns (total 3 columns):      :列索引#   Column   Non-Null Count  Dtype  :列的信息
---  ------   --------------  -----0   Chinese  4 non-null      int32  :4个均为非空值1   Math     4 non-null      int322   English  4 non-null      int32
dtypes: int32(3)                     :元素的类型
memory usage: 80.0+ bytes            :内存中的存储情况

通过 info(),我们得知所有列的数据类型均为 int32,且每列都没有缺失值。这有助于确认数据是否完整且正确。

3.5.3. std():标准差

标准差是衡量数据分散程度的一个指标。标准差较大的列可能存在更多的异常值,因为数据点的波动幅度较大。我们可以通过 std() 函数来计算每列数据的标准差,并作为识别异常值的一个辅助指标。

df.std()

输出结果:

Chinese     13.022417
Math        26.474831
English     19.397165
dtype: float64

如果某一列的标准差非常大,且数据的分布范围较广,则可能存在一些离群点或异常值。

3.5.4. drop():删除特定索引

drop() 函数可以帮助我们删除 DataFrame 中的特定行或列。如果在数据中发现了明显的异常值或错误数据,可以使用 drop() 来移除这些数据。

df1 = df.copy()
df1.drop("zhangsan")  # 删除行
df1.drop(index="zhangsan")  # 删除行df1.drop("Chinese", axis=1)  # 删除列
df1.drop(columns=["Chinese", "Math"], inplace=True)  # 删除多列并覆盖原数据

在数据清理过程中,删除异常值或者错误数据是常见的操作,drop() 函数提供了简单且灵活的方式来删除不需要的数据。

3.5.5. unique():唯一值去重

unique() 函数可以帮助我们检查数据中是否有重复值,对于检测异常值非常有帮助。它返回一个包含唯一值的数组。

df["Chinese"].unique()  # 获取“Chinese”列中的唯一值

如果某列中有重复值,unique() 可以帮助我们识别并处理这些重复数据。

3.5.6. query():按条件查询

query() 函数可以通过条件表达式来过滤数据,这对于识别某一特定范围之外的异常值非常有用。

df.query('Math > 60')  # 查询 Math 列大于 60 的数据
df.query('Math > 60 and English > 60')  # 多条件查询
df.query('Math in [10, 20, 30]')  # 查询 Math 列为指定值的数据

query() 函数可以结合逻辑运算符(如 andor)以及比较符号(如 >, <, ==)对数据进行灵活的过滤。

3.5.7. sort_values():根据值排序

sort_values() 函数可以根据某列的值对数据进行排序,帮助我们识别最大或最小值,从而找到异常值。

df.sort_values("Chinese")  # 按照“Chinese”列升序排序
df.sort_values("Chinese", ascending=False)  # 降序排序

通过排序,我们可以快速发现某列的极端值,进而识别可能的异常值。

3.5.8. sort_index():根据索引排序

有时我们需要根据行索引来排序数据,sort_index() 函数提供了这一功能。尽管它与异常值过滤关系不大,但在数据整理过程中,它依然非常实用。

df.sort_index()  # 根据索引排序
3.5.9 案例

(练习)新建一个形状为10000*3的标准正态分布的DataFrame(np.random.randn),去除掉所有满足以下情况的行:其中任一元素绝对值大于3倍标准差

df = pd.DataFrame(np.random.randn(10000, 3))
cond = df.abs() > df.std()*3 #通过矩阵的运算求得各元素是否满足条件
cond1 = cond.any(axis=1) #判断每一行是否包含一个False(即不满足条件的行)
df[~cond1] #将不满足条件的行过滤

3.5 Pandas的数学处理

3.5.1 抽样
df.take([1, 0, 3, 2])# 行排序
df.take([2, 1, 0], axis=1) #列排序
np.random.permutation([0, 1, 2]) #随机排序
# 无放回抽样
df.take(np.random.permutation([0, 1, 2]))
# 有放回抽样
df.take(np.random.randint(0, 4, size=5))
3.5.2 常用的数学函数

Pandas 提供了许多常用的数学函数,帮助我们对数据进行统计和分析

1 统计指标函数
  • max():计算每一列或每一行的最大值。

    df.max()  # 默认求每一列的最大值
    df.max(axis=1)  # 求每一行的最大值
    
  • count():计算每一列或每一行的非空元素个数。

    df.count()  # 默认求每一列的非空元素个数
    df.count(axis=1)  # 求每一行的非空元素个数
    
  • median():计算每一列的中位数。

    df.median()  # 默认求每一列的中位数
    
  • mean():计算每一列的平均值。

    df.mean()  # 默认求每一列的平均值
    
  • var():计算每一列的方差。

    df.var()  # 默认求每一列的方差
    
  • std():计算每一列的标准差。

    df.std()  # 默认求每一列的标准差
    
2 相关性与协方差
  • cov():计算每一列之间的协方差。

    df.cov()  # 默认求每一列的协方差
    
  • corr():计算每一列之间的相关系数。

    df.corr()  # 默认求每一列的相关系数
    
3 其他常用函数
  • value_counts():统计某一列或 Series 中每个元素的出现次数。

    df[0].value_counts()  # 统计第0列元素的出现次数
    
  • cumsum():计算每一列的累加和。

    df.cumsum()  # 每列的累加和
    
  • cumprod():计算每一列的累乘积。

    df.cumprod()  # 每列的累乘积
    
4. 组合使用示例

假设我们有一个 DataFrame,我们可以结合上述数学函数和抽样方法进行更复杂的操作。

例如,随机抽样 3 行数据并计算它们的平均值和标准差:

import pandas as pd
import numpy as np# 示例 DataFrame
data = {'A': [1, 2, 3, 4, 5],'B': [6, 7, 8, 9, 10],'C': [11, 12, 13, 14, 15]}
df = pd.DataFrame(data)# 随机抽样
sampled_df = df.take(np.random.permutation(df.index)[:3])# 计算平均值和标准差
mean_values = sampled_df.mean()
std_values = sampled_df.std()print("抽样数据:\n", sampled_df)
print("\n平均值:\n", mean_values)
print("\n标准差:\n", std_values)

Pandans数据聚合

数据聚合通常是在数据处理的最后一步,它的目的是将每个分组的数据转换成一个单一的数值,以便做出总结或进一步分析。数据分类处理(GroupBy)是数据分析中非常重要的一步,它主要分为三个步骤:

3.6.1. 分组 (Group)
  • 在分组的步骤中,数据会根据某一列或多列的值进行分组。比如,你可以根据“颜色”列将数据分为不同的颜色组,或者根据日期将数据分为不同的时间段组。
  • 这一步使用 groupby() 函数来完成。groupby() 函数可以将数据框按某些列的值分组,创建一个 GroupBy 对象。
grouped = ddd.groupby('color')
# 可以通过groups属性查看元素的值
grouped.groups #里面包含聚合元素的索引
3.6.2. 用函数处理 (Apply Functions)
  • 一旦数据被分组,你可以对每一组数据应用特定的函数进行处理。常见的操作有求和、平均数、最大值、最小值等。
  • 你可以对分组后的数据应用标准的聚合函数(如 sum()mean()count() 等),或者你可以定义自己的自定义函数来处理每个分组。
grouped_sum = grouped.sum()  # 对每个分组的数据求和
grouped_mean = grouped.mean()  # 对每个分组的数据求平均

也可以使用 apply()agg() 方法,来应用更加复杂的操作:

grouped_custom = grouped.apply(lambda x: x['score'].max() - x['score'].min())
3.6.3. 合并 (Combine)
  • 聚合操作完成后,最终的结果是各组的数据经过处理后得到的一个单一数值。groupby() 返回的是一个 GroupBy 对象,你通常需要将不同组的结果合并成一个新的数据框或系列。
  • 比如,使用 sum()mean() 后,会返回每个分组的汇总结果,合并成一个新的数据框或系列。
final_result = grouped['score'].sum()  # 对每个分组的 "score" 列求和并合并结果
groupby() 的常见方法:
  • 聚合:
    • sum():求和
    • mean()`:均值
    • count():计数
    • min():最小值
    • max():最大值
    • std():标准差
    • agg():自定义聚合函数
  • 过滤:对分组后的数据进行过滤(filter()
  • 转换:对分组后的数据进行转换(transform()
  • 应用:应用自定义函数(apply()
3.6.4. 案例
ddd=pd.DataFrame(
data={"item":["萝卜","白菜","辣椒","冬瓜","萝卜","白菜","辣椒","冬瓜"],"color":["白","青","红","白","青","红","白","青"],"weight":[10,20,10,10,30,40,50,60],"price":[0.99,1.99,2.99, 3.99,4,5,6,7]
})
# 对ddd进行聚合操作,求出颜色为白色的价格总和
ddd.groupby("color").sum(numeric_only=False).loc['白']
# 对ddd进行聚合操作,分别求出萝卜的所有重量以及平均价格
x1 = ddd.groupby("item")[["weight"]].sum()
x2 = ddd.groupby("item")[["price"]].mean()
x1.merge(x2, left_index=True, right_index=True).loc[['萝卜']]

相关文章:

Pandas基础06(异常值的检测与过滤/抽样/常用聚合函数/数据聚合)

Pandas基础06 异常值的检测与过滤 在数据分析中&#xff0c;异常值&#xff08;Outliers&#xff09;是指与其他数据点显著不同的值。这些值可能由于数据录入错误、设备故障或极端情况而产生&#xff0c;因此在进行数据分析之前&#xff0c;需要对其进行检测与过滤。本文将介绍…...

事务01之事务机制

事务机制 文章目录 事务机制一&#xff1a;ACID1&#xff1a;什么是ACID2&#xff1a;MySQL是如何实现ACID的 二&#xff1a;MySQL事务机制综述1&#xff1a;手动管理事务2&#xff1a;事务回滚点3&#xff1a;事务问题和隔离机制&#xff08;面试&#xff09;3.1&#xff1a;事…...

Python-基于mediapipe,pyautogui,cv2和numpy的电脑手势截屏工具(进阶版)

前言:在我们的日常生活中,手机已经成为我们每天工作,学习,生活的一个不可或缺的部分。众所周知:为了我们的使用方便,手机里面的很多功能非常人性化,既便捷又高效,其中就有手机的截屏方式,它们花样繁多,如三指截屏,手势截屏等。那么怎么在电脑里面也实现这个功能呢?…...

@EventListener底层原理(超详细)| @TransactionalEventListener底层原理 | 事务同步

0. 举个栗子0.1. 事件监听方法0.2. 事件推送 1. EventListener注解2. EventListener标注的监听方法解析2.1. 事件监听方法处理器EventListenerMethodProcessors2.1.1. AbstractApplicationContext.invokeBeanFactoryPostProcessors2.1.2. AbstractApplicationContext.initAppli…...

NX/UG二次开发—CAM—快速查找程序参数名称

使用UF_PARAM_XXX读取或设置参数时,会发现程序中有一个INT类型参数param_index,这个就是对应程序中的参数,比如读取程序余量,则param_index = UF_PARAM_STOCK_PART,读取程序的加工坐标系则param_index = UF_PARAM_MCS等等。 你需要读取什么参数,只要只能在uf_param_indic…...

X86路由搭配rtl8367s交换机

x86软路由&#xff0c;买双网口就好。或者单网口主板&#xff0c;外加一个pcie千兆。 华硕h81主板戴尔i350-T2双千兆&#xff0c;做bridge下载&#xff0c;速度忽高忽低。 今天交换机到货&#xff0c;poe供电&#xff0c;还是网管&#xff0c;支持Qvlan及IGMP Snooping&#xf…...

【C++语言】卡码网语言基础课系列----5. A+B问题VIII

文章目录 练习题目AB问题VIII具体代码实现 小白寄语诗词共勉 练习题目 AB问题VIII 题目描述&#xff1a; 你的任务是计算若干整数的和。 输入描述&#xff1a; 输入的第一行为一个整数N&#xff0c;接下来N行每行先输入一个整数M&#xff0c;然后在同一行内输入M个整数。 输出…...

【LLM-agent】(task1)简单客服和阅卷智能体

note 一个完整的agent有模型 (Model)、工具 (Tools)、编排层 (Orchestration Layer)一个好的结构化 Prompt 模板&#xff0c;某种意义上是构建了一个好的全局思维链。 如 LangGPT 中展示的模板设计时就考虑了如下思维链&#xff1a;Role (角色) -> Profile&#xff08;角色…...

CAP 定理的 P 是什么

分布式系统 CAP 定理 P 代表什么含义 作者之前在看 CAP 定理时抱有很大的疑惑&#xff0c;CAP 定理的定义是指在分布式系统中三者只能满足其二&#xff0c;也就是存在分布式 CA 系统的。作者在网络上查阅了很多关于 CAP 文章&#xff0c;虽然这些文章对于 P 的解释五花八门&am…...

RK3568使用opencv(使用摄像头捕获图像数据显示)

文章目录 一、opencv相关的类1. **cv::VideoCapture**2. **cv::Mat**3. **cv::cvtColor**4. **QImage**5. **QPixmap**总结二、代码实现一、opencv相关的类 1. cv::VideoCapture cv::VideoCapture 是 OpenCV 中用于视频捕捉的类,常用于从摄像头、视频文件、或者图像序列中捕…...

ZZNUOJ(C/C++)基础练习1021——1030(详解版)

目录 1021 : 三数求大值 C语言版 C版 代码逻辑解释 1022 : 三整数排序 C语言版 C版 代码逻辑解释 补充 &#xff08;C语言版&#xff0c;三目运算&#xff09;C类似 代码逻辑解释 1023 : 大小写转换 C语言版 C版 1024 : 计算字母序号 C语言版 C版 代码逻辑总结…...

2025 年,链上固定收益领域迈向新时代

“基于期限的债券市场崛起与 Secured Finance 的坚定承诺” 2025年&#xff0c;传统资产——尤其是股票和债券——大规模涌入区块链的浪潮将创造历史。BlackRock 首席执行官 Larry Fink 近期在彭博直播中表示&#xff0c;代币化股票和债券将逐步融入链上生态&#xff0c;将进一…...

使用where子句筛选记录

默认情况下,SearchCursor将返回一个表或要素类的所有行.然而在很多情况下,常常需要某些条件来限制返回行数. 操作方法: 1.打开IDLE,加载先前编写的SearchCursor.py脚本 2.添加where子句,更新SearchCursor()函数,查找记录中有<>文本的<>字段 with arcpy.da.Searc…...

基于互联网+智慧水务信息化整体解决方案

智慧水务的概述与发展背景 智慧水务是基于互联网、云计算、大数据、物联网等先进技术&#xff0c;对水务行业的工程建设、生产管理、管网运营、营销服务及企业综合管理等业务进行全面智慧化管理的创新模式。它旨在解决水务企业分散经营、管理水平不高、投资不足等问题。 水务…...

FIDL:Flutter与原生通讯的新姿势,不局限于基础数据类型

void initUser(User user); } 2、执行命令./gradlew assembleDebug&#xff0c;生成IUserServiceStub类和fidl.json文件 3、打开通道&#xff0c;向Flutter公开方法 FidlChannel.openChannel(getFlutterEngine().getDartExecutor(), new IUserServiceStub() { Override void…...

文件读写操作

写入文本文件 #include <iostream> #include <fstream>//ofstream类需要包含的头文件 using namespace std;void test01() {//1、包含头文件 fstream//2、创建流对象ofstream fout;/*3、指定打开方式&#xff1a;1.ios::out、ios::trunc 清除文件内容后打开2.ios:…...

cf1000(div.2)

Minimal Coprime最小公倍数 输入&#xff1a; 6 1 2 1 10 49 49 69 420 1 1 9982 44353 输出&#xff1a; 1 9 0 351 1 34371 代码...

【2025年数学建模美赛E题】(农业生态系统)完整解析+模型代码+论文

生态共生与数值模拟&#xff1a;生态系统模型的物种种群动态研究 摘要1Introduction1.1Problem Background1.2Restatement of the Problem1.3Our Work 2 Assumptions and Justifications3 Notations4 模型的建立与求解4.1 农业生态系统模型的建立与求解4.1.1 模型建立4.1.2求解…...

jhat命令详解

jhat 命令通常与 jmap 搭配使用&#xff0c;用来分析 jmap 生成的 dump 文件&#xff0c;jhat 内置了一个微型的HTTP/HTML服务器&#xff0c;生成 dump 的分析结果后&#xff0c;可以在浏览器中查看。 命令的使用格式如下。&#xff08;其中heap-dump-file为必填项&#xff09…...

FFmpeg(7.1版本)的基本组成

1. 前言 FFmpeg 是一个非常流行的开源项目,它提供了处理音频、视频以及其他多媒体内容的强大工具。FFmpeg 包含了大量的库,可以用来解码、编码、转码、处理和播放几乎所有类型的多媒体文件。它广泛用于视频和音频的录制、转换、流媒体传输等领域。 2. FFmpeg的组成 1. FFmp…...

DDD - 领域驱动设计分层架构:构建可演化的微服务架构

文章目录 引言1. 什么是DDD分层架构&#xff1f;1.1 DDD分层架构的演变1.2 四层架构的起源与问题1.3 依赖倒置和五层架构 2. DDD分层架构的核心层次2.1 用户接口层&#xff08;User Interface Layer&#xff09;2.2 应用层&#xff08;Application Layer&#xff09;2.3 领域层…...

大数据挖掘--两个角度理解相似度计算理论

文章目录 0 相似度计算可以转换成什么问题1 集合相似度的应用1.1 集合相似度1.1文档相似度1.2 协同过滤用户-用户协同过滤物品-物品协同过滤 1.2 文档的shingling--将文档表示成集合1.2.1 k-shingling1.2.2 基于停用词的 shingling 1.3 最小哈希签名1.4 局部敏感哈希算法&#…...

主流的AEB标准有哪些?

目录 1、AEB的技术构成与工作原理 2、典型应用场景举例 3、AEB的功能分类 4、AEB系统性能评估的关键因素 5、全球AEB技术标准概览 5.1、联合国欧洲经济委员会&#xff08;UN ECE&#xff09; 5.2、美国NHTSA法规 5.3、中国标准 5.4、印度AIS 185 5.5、澳大利亚ADR法规…...

开源智慧园区管理系统如何重塑企业管理模式与运营效率

内容概要 在如今快速发展的商业环境中&#xff0c;企业面临着日益复杂的管理挑战。开源智慧园区管理系统应运而生&#xff0c;旨在通过技术创新来应对这些挑战。它不仅是一个简单的软件工具&#xff0c;而是一个全面整合大数据、物联网和智能化功能的综合平台&#xff0c;为企…...

decison tree 决策树

熵 信息增益 信息增益描述的是在分叉过程中获得的熵减&#xff0c;信息增益即熵减。 熵减可以用来决定什么时候停止分叉&#xff0c;当熵减很小的时候你只是在不必要的增加树的深度&#xff0c;并且冒着过拟合的风险 决策树训练(构建)过程 离散值特征处理&#xff1a;One-Hot…...

Spring Data JPA 实战:构建高性能数据访问层

1 简介 1.1 Spring Data JPA 概述 1.1.1 什么是 Spring Data JPA? Spring Data JPA 是 Spring Data 项目的一部分,旨在简化对基于 JPA 的数据库访问操作。它通过提供一致的编程模型和接口,使得开发者可以更轻松地与关系型数据库进行交互,同时减少了样板代码的编写。Spri…...

11 Spark面试真题

11 Spark大厂面试真题 1. 通常来说&#xff0c;Spark与MapReduce相比&#xff0c;Spark运行效率更高。请说明效率更高来源于Spark内置的哪些机制&#xff1f;2. hadoop和spark使用场景&#xff1f;3. spark如何保证宕机迅速恢复?4. hadoop和spark的相同点和不同点&#xff1f;…...

【AI论文】VideoAuteur:迈向长叙事视频

摘要&#xff1a;近期的视频生成模型在制作持续数秒的高质量视频片段方面已展现出令人鼓舞的成果。然而&#xff0c;这些模型在生成能传达清晰且富有信息量的长序列时面临挑战&#xff0c;限制了它们支持连贯叙事的能力。在本文中&#xff0c;我们提出了一个大规模烹饪视频数据…...

循环神经网络(RNN)+pytorch实现情感分析

目录 一、背景引入 二、网络介绍 2.1 输入层 2.2 循环层 2.3 输出层 2.4 举例 2.5 深层网络 三、网络的训练 3.1 训练过程举例 1&#xff09;输出层 2&#xff09;循环层 3.2 BPTT 算法 1&#xff09;输出层 2&#xff09;循环层 3&#xff09;算法流程 四、循…...

css-background-color(transparent)

1.前言 在 CSS 中&#xff0c;background-color 属性用于设置元素的背景颜色。除了基本的颜色值&#xff08;如 red、blue 等&#xff09;和十六进制颜色值&#xff08;如 #FF0000、#0000FF 等&#xff09;&#xff0c;还有一些特殊的属性值可以用来设置背景颜色。 2.backgrou…...