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

news2025/2/2 3:39:42

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

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

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

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

import pandas as pd
import numpy as np

df = 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      int32
 2   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[['萝卜']]

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

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

相关文章

事务01之事务机制

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

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…

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

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

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;将进一…

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

智慧水务的概述与发展背景 智慧水务是基于互联网、云计算、大数据、物联网等先进技术&#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 领域层…

主流的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…

【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;算法流程 四、循…

Linux网络 | 网络层IP报文解析、认识网段划分与IP地址

前言&#xff1a;本节内容为网络层。 主要讲解IP协议报文字段以及分离有效载荷。 另外&#xff0c; 本节也会带领友友认识一下IP地址的划分。 那么现在废话不多说&#xff0c; 开始我们的学习吧&#xff01;&#xff01; ps&#xff1a;本节正式进入网络层喽&#xff0c; 友友们…