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[['萝卜']]

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

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

相关文章

【PyTorch】4.张量拼接操作

个人主页&#xff1a;Icomi 在深度学习蓬勃发展的当下&#xff0c;PyTorch 是不可或缺的工具。它作为强大的深度学习框架&#xff0c;为构建和训练神经网络提供了高效且灵活的平台。神经网络作为人工智能的核心技术&#xff0c;能够处理复杂的数据模式。通过 PyTorch&#xff0…

jstat命令详解

jstat 用于监视虚拟机运行时状态信息的命令&#xff0c;它可以显示出虚拟机进程中的类装载、内存、垃圾收集、JIT 编译等运行数据。 命令的使用格式如下。 jstat [option] LVMID [interval] [count]各个参数详解&#xff1a; option&#xff1a;操作参数LVMID&#xff1a;本…

(动态规划路径基础 最小路径和)leetcode 64

视频教程 1.初始化dp数组&#xff0c;初始化边界 2、从[1行到n-1行][1列到m-1列]依次赋值 #include<vector> #include<algorithm> #include <iostream>using namespace std; int main() {vector<vector<int>> grid { {1,3,1},{1,5,1},{4,2,1}…

松灵机器人 scout ros2 驱动 安装

必须使用 ubuntu22 必须使用 链接的humble版本 #打开can 口 sudo modprobe gs_usbsudo ip link set can0 up type can bitrate 500000sudo ip link set can0 up type can bitrate 500000sudo apt install can-utilscandump can0mkdir -p ~/ros2_ws/srccd ~/ros2_ws/src git cl…

MATLAB-Simulink并行仿真示例

一、概述 在进行simulink仿真的过程中常常遇到CPU利用率较低&#xff0c;仿真缓慢的情况&#xff0c;可以借助并行仿真改善这些问题&#xff0c;其核心思想是将参数扫描、蒙特卡洛分析或多工况验证等任务拆分成多个子任务&#xff0c;利用多核CPU或计算集群的并行计算能力&…

Workbench 中的热源仿真

探索使用自定义工具对移动热源进行建模及其在不同行业中的应用。 了解热源动力学 对移动热源进行建模为各种工业过程和应用提供了有价值的见解。激光加热和材料加工使用许多激光束来加热、焊接或切割材料。尽管在某些情况下&#xff0c;热源 &#xff08;q&#xff09; 不是通…

I2C基础知识

引言 这里祝大家新年快乐&#xff01;前面我们介绍了串口通讯协议&#xff0c;现在我们继续来介绍另一种常见的简单的串行通讯方式——I2C通讯协议。 一、什么是I2C I2C 通讯协议&#xff08;Inter-Integrated Circuit&#xff09;是由Phiilps公司在上个世纪80年代开发的&#…

深度学习 DAY3:NLP发展史

NLP发展史 NLP发展脉络简要梳理如下&#xff1a; (远古模型&#xff0c;上图没有但也可以算NLP&#xff09; 1940 - BOW&#xff08;无序统计模型&#xff09; 1950 - n-gram&#xff08;基于词序的模型&#xff09; (近代模型&#xff09; 2001 - Neural language models&am…

CSS 背景与边框:从基础到高级应用

CSS 背景与边框&#xff1a;从基础到高级应用 1. CSS 背景样式1.1 背景颜色示例代码&#xff1a;设置背景颜色 1.2 背景图像示例代码&#xff1a;设置背景图像 1.3 控制背景平铺行为示例代码&#xff1a;控制背景平铺 1.4 调整背景图像大小示例代码&#xff1a;调整背景图像大小…

HarmonyOS简介:应用开发的机遇、挑战和趋势

问题 更多的智能设备并没有带来更好的全场景体验 连接步骤复杂数据难以互通生态无法共享能力难以协同 主要挑战 针对不同设备上的不同操作系统&#xff0c;重复开发&#xff0c;维护多套版本 多种语言栈&#xff0c;对人员技能要求高 多种开发框架&#xff0c;不同的编程…

如何使用tushare pro获取股票数据——附爬虫代码以及tushare积分获取方式

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、pandas是什么&#xff1f;二、使用步骤 1.引入库2.读入数据 总结 一、Tushare 介绍 Tushare 是一个提供中国股市数据的API接口服务&#xff0c;它允许用户…

观察者模式和订阅发布模式的关系

有人把观察者模式等同于发布订阅模式&#xff0c;也有人认为这两种模式存在差异&#xff0c;本质上就是调度的方法不同。 发布订阅模式: 观察者模式: 相比较&#xff0c;发布订阅将发布者和观察者之间解耦。&#xff08;发布订阅有调度中心处理&#xff09;

【HarmonyOS之旅】基于ArkTS开发(三) -> 兼容JS的类Web开发(二)

目录 1 -> HML语法 1.1 -> 页面结构 1.2 -> 数据绑定 1.3 -> 普通事件绑定 1.4 -> 冒泡事件绑定5 1.5 -> 捕获事件绑定5 1.6 -> 列表渲染 1.7 -> 条件渲染 1.8 -> 逻辑控制块 1.9 -> 模板引用 2 -> CSS语法 2.1 -> 尺寸单位 …

Python的那些事第五篇:数据结构的艺术与应用

新月人物传记&#xff1a;人物传记之新月篇-CSDN博客 目录 一、列表&#xff08;List&#xff09;&#xff1a;动态的容器 二、元组&#xff08;Tuple&#xff09;&#xff1a;不可变的序列 三、字典&#xff08;Dict&#xff09;&#xff1a;键值对的集合 四、集合&#xf…

【AI】DeepSeek 概念/影响/使用/部署

在大年三十那天&#xff0c;不知道你是否留意到&#xff0c;“deepseek”这个词出现在了各大热搜榜单上。这引起了我的关注&#xff0c;出于学习的兴趣&#xff0c;我深入研究了一番&#xff0c;才有了这篇文章的诞生。 概念 那么&#xff0c;什么是DeepSeek&#xff1f;首先百…

MapReduce简单应用(一)——WordCount

目录 1. 执行过程1.1 分割1.2 Map1.3 Combine1.4 Reduce 2. 代码和结果2.1 pom.xml中依赖配置2.2 工具类util2.3 WordCount2.4 结果 参考 1. 执行过程 假设WordCount的两个输入文本text1.txt和text2.txt如下。 Hello World Bye WorldHello Hadoop Bye Hadoop1.1 分割 将每个文…

Dest1ny漏洞库:用友 U8 Cloud ReleaseRepMngAction SQL 注入漏洞(CNVD-2024-33023)

大家好&#xff0c;今天是Dest1ny漏洞库的专题&#xff01;&#xff01; 会时不时发送新的漏洞资讯&#xff01;&#xff01; 大家多多关注&#xff0c;多多点赞&#xff01;&#xff01;&#xff01; 0x01 产品简介 用友U8 Cloud是用友推出的新一代云ERP&#xff0c;主要聚…

2.1.2 Bayer阵列与去马赛克

文章目录 Bayer阵列去马赛克方法 Bayer阵列 由于传感器只能感受到光的强度&#xff0c;而无法感知颜色&#xff0c;所以需要用红、绿、蓝颜色的滤光片将光中的R、G、B亮度滤出&#xff0c;再通过R、G、B的组合得到各种色彩。Bayer阵列是使用一个传感器获得彩色图像的方法&#…

红黑树的学习

红黑树的概念 红黑树&#xff0c;是一种二叉搜索树&#xff0c;但在每个结点上增加一个存储位表示结点的颜色&#xff0c;可以是Red或 Black。 通过对任何一条从根到叶子的路径上各个结点着色方式的限制&#xff0c;红黑树确保没有一条路径会比其他路径长出俩倍&#xff0c;因…

2025年01月31日Github流行趋势

项目名称&#xff1a;Qwen2.5项目地址url&#xff1a;https://github.com/QwenLM/Qwen2.5项目语言&#xff1a;Shell历史star数&#xff1a;13199今日star数&#xff1a;459项目维护者&#xff1a;jklj077, JustinLin610, bug-orz, huybery, JianxinMa项目简介&#xff1a;Qwen…