目录

一、缺失值处理

1.1 缺失值的识别

1.2 删除缺失值

1.3 填充缺失值

二、异常值检测

2.1 异常值的定义

2.2 常用检测方法

IQR(四分位数间距)法

Z-score(标准分数)法

三、实战案例:基因表达数据预处理

四、总结


数据分析过程中,数据的质量直接影响分析结果的可靠性。缺失值和异常值是两类常见的数据问题,如果不及时处理,可能会导致模型偏差、误判或不稳定的结果。本文将详细介绍如何使用Pandas对数据中的缺失值进行处理,以及如何检测并处理异常值,帮助你构建更为健壮的数据预处理流程。


一、缺失值处理

1.1 缺失值的识别

在Pandas中,缺失值通常由NaN表示。我们可以利用内置方法快速识别数据中缺失值的分布和数量。

示例代码

import pandas as pd
import numpy as np# 构造示例DataFrame
data = {'A': [1, 2, np.nan, 4, 5],'B': [5, np.nan, np.nan, 8, 10],'C': [np.nan, 2, 3, 4, 5]
}
df = pd.DataFrame(data)
print("原始数据:")
print(df)# 检查每一列缺失值数量
print("\n缺失值统计:")
print(df.isnull().sum())
原始数据:A     B    C
0  1.0   5.0  NaN
1  2.0   NaN  2.0
2  NaN   NaN  3.0
3  4.0   8.0  4.0
4  5.0  10.0  5.0缺失值统计:
A    1
B    2
C    1
dtype: int64

1.2 删除缺失值

如果缺失值比例较小或缺失行/列对分析影响不大,可以使用dropna()方法删除缺失值。

示例代码

# 删除含有缺失值的行
df_drop_rows = df.dropna()
print("\n删除含有缺失值的行后的数据:")
print(df_drop_rows)# 删除含有缺失值的列
df_drop_columns = df.dropna(axis=1)
print("\n删除含有缺失值的列后的数据:")
print(df_drop_columns)
删除含有缺失值的行后的数据:A     B    C
3  4.0   8.0  4.0
4  5.0  10.0  5.0删除含有缺失值的列后的数据:
Empty DataFrame
Columns: []
Index: [0, 1, 2, 3, 4]

1.3 填充缺失值

有时候删除缺失值会导致数据量骤减,此时可以考虑填充缺失值。常用方法包括使用均值、中位数、前一个有效值等进行填充。

示例代码

# 使用每列均值填充缺失值
df_filled_mean = df.fillna(df.mean())
print("\n使用均值填充缺失值后的数据:")
print(df_filled_mean)# 使用前向填充方法填充缺失值
df_filled_ffill = df.fillna(method='ffill')
print("\n使用前向填充后的数据:")
print(df_filled_ffill)
使用均值填充缺失值后的数据:A          B    C
0  1.0   5.000000  3.5
1  2.0   7.666667  2.0
2  3.0   7.666667  3.0
3  4.0   8.000000  4.0
4  5.0  10.000000  5.0使用前向填充后的数据:A     B    C
0  1.0   5.0  NaN
1  2.0   5.0  2.0
2  2.0   5.0  3.0
3  4.0   8.0  4.0
4  5.0  10.0  5.0

二、异常值检测

2.1 异常值的定义

异常值通常是指与其他数据相比显著偏离的数据点。它们可能由测量错误、数据录入错误或真实的罕见现象引起。检测并处理异常值对于避免模型误判十分关键。

2.2 常用检测方法

IQR(四分位数间距)法

IQR方法利用数据的四分位数来识别异常值:

  • 计算第一四分位数(Q1)和第三四分位数(Q3)。

  • IQR = Q3 - Q1

  • 通常认为低于 Q1 - 1.5*IQR 或高于 Q3 + 1.5*IQR 的数据为异常值。

示例代码

# 构造示例数据
data_outliers = {'Value': [10, 12, 11, 13, 100, 12, 11, 14, 10, 13]
}
df_outliers = pd.DataFrame(data_outliers)# 计算四分位数和IQR
Q1 = df_outliers['Value'].quantile(0.25)
Q3 = df_outliers['Value'].quantile(0.75)
IQR = Q3 - Q1print("Q1: {:.2f}, Q3: {:.2f}, IQR: {:.2f}".format(Q1, Q3, IQR))# 定义异常值检测条件
lower_bound = Q1 - 1.5 * IQR
upper_bound = Q3 + 1.5 * IQRprint("异常值下界:{:.2f}, 上界:{:.2f}".format(lower_bound, upper_bound))# 筛选非异常值数据
df_no_outliers = df_outliers[(df_outliers['Value'] >= lower_bound) & (df_outliers['Value'] <= upper_bound)]
print("\n去除异常值后的数据:")
print(df_no_outliers)
Q1: 11.00, Q3: 13.00, IQR: 2.00
异常值下界:8.00, 上界:16.00去除异常值后的数据:Value
0     10
1     12
2     11
3     13
5     12
6     11
7     14
8     10
9     13
Z-score(标准分数)法

Z-score方法基于均值和标准差,将数据标准化后检测偏离较远的点。通常,当Z-score大于3或小于-3时,认为该数据点为异常值。

示例代码

from scipy import stats# 计算Z-score
df_outliers['Z_score'] = stats.zscore(df_outliers['Value'])# 筛选Z-score在-3到3之间的数据
df_no_outliers_z = df_outliers[(df_outliers['Z_score'] > -3) & (df_outliers['Z_score'] < 3)]
print("\n使用Z-score方法去除异常值后的数据:")
print(df_no_outliers_z)
使用Z-score方法去除异常值后的数据:Value   Z_score
0     10 -0.400060
1     12 -0.324577
2     11 -0.362318
3     13 -0.286835
4    100  2.996675
5     12 -0.324577
6     11 -0.362318
7     14 -0.249094
8     10 -0.400060
9     13 -0.286835

注意:在使用Z-score方法时,数据应近似服从正态分布;对于偏态分布的数据,IQR方法可能更为合适。

三、实战案例:基因表达数据预处理

假设我们在基因表达数据中不仅存在缺失值,还包含一些测量异常的表达值。下面展示如何将上述方法应用到实际数据中。

示例数据文件gene_expression.csv

Gene,Condition,Sample_A,Sample_B,Sample_C
Gene1,Treated,20,25,30
Gene2,Control,15,NA,18
Gene3,Treated,22,20,21
Gene4,Control,100,17,19  # 这里的100为异常值

实战代码

# 读取数据
df_expr = pd.read_csv('gene_expression.csv', header=0, na_values=['NA'])# 将基因名称设为索引
df_expr.set_index('Gene', inplace=True)
print("原始基因表达数据:")
print(df_expr)# 1. 缺失值处理:使用每列均值填充缺失值
df_expr.fillna(df_expr.mean(), inplace=True)
print("\n填充缺失值后的数据:")
print(df_expr)# 2. 异常值检测:以Sample_A列为例,使用IQR方法检测异常值
Q1 = df_expr['Sample_A'].quantile(0.25)
Q3 = df_expr['Sample_A'].quantile(0.75)
IQR = Q3 - Q1
lower_bound = Q1 - 1.5 * IQR
upper_bound = Q3 + 1.5 * IQRprint("\nSample_A列 - Q1: {:.2f}, Q3: {:.2f}, IQR: {:.2f}".format(Q1, Q3, IQR))
print("Sample_A列 - 异常值下界:{:.2f}, 上界:{:.2f}".format(lower_bound, upper_bound))# 筛选非异常值数据
df_expr_no_outliers = df_expr[(df_expr['Sample_A'] >= lower_bound) & (df_expr['Sample_A'] <= upper_bound)]
print("\n去除Sample_A列异常值后的数据:")
print(df_expr_no_outliers)
原始基因表达数据:Condition  Sample_A  Sample_B  Sample_C
Gene                                         
Gene1   Treated        20      25.0        30
Gene2   Control        15       NaN        18
Gene3   Treated        22      20.0        21
Gene4   Control       100      17.0        19填充缺失值后的数据:Condition  Sample_A   Sample_B  Sample_C
Gene                                          
Gene1   Treated        20  25.000000        30
Gene2   Control        15  20.666667        18
Gene3   Treated        22  20.000000        21
Gene4   Control       100  17.000000        19Sample_A列 - Q1: 18.75, Q3: 41.50, IQR: 22.75
Sample_A列 - 异常值下界:-15.38, 上界:75.62去除Sample_A列异常值后的数据:Condition  Sample_A   Sample_B  Sample_C
Gene                                          
Gene1   Treated        20  25.000000        30
Gene2   Control        15  20.666667        18
Gene3   Treated        22  20.000000        21

四、总结

在数据预处理中,去除缺失值和检测异常值是确保数据质量的关键步骤。通过Pandas提供的方法,我们可以快速识别并处理缺失数据;利用IQR和Z-score方法,我们可以检测并剔除明显偏离的数据点,从而为后续分析和建模打下坚实的基础。掌握这些技巧不仅能提高数据分析的准确性,也有助于构建更加稳健的分析流程。

欢迎大家在评论区分享你们在实际应用中的经验和问题,进一步探讨数据预处理中的最佳实践!

  • 图片

  • AIDD learning 便捷查看
  • 方式1:(免费获取)转发此文章至朋友圈(所有人可见,获6个赞)或者3个群,并附“推荐关注学习”,1小时后将截图发送后台留言:2025312pandas。本人会在24小时内回复您获取资料。

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

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

相关文章

B.30.01.1-Java并发编程及电商场景应用

摘要 本文深入探讨了Java并发编程的核心概念及其在电商系统中的实际应用。从基础并发机制到高级并发工具&#xff0c;结合电商业务场景中的典型问题&#xff0c;如高并发秒杀、库存管理、订单处理等&#xff0c;提供了实用的解决方案和最佳实践。 1. Java并发编程基础 1.1 并发…

怎样避免游戏检测到云手机?

以下是一些可能避免游戏检测到云手机的方法&#xff1a;云手机可能会因网络配置等因素出现一些异常网络行为&#xff0c;如网络延迟的规律性变化等&#xff0c;在使用云手机玩游戏时&#xff0c;尽量保持网络行为的稳定性和自然性&#xff0c;避免短时间内频繁切换网络连接&…

文件上传 --- uploadlabs靶场

目录 1 前端和js校验 抓包改包 2 . 2.1 .htaccess&#xff08;伪静态&#xff09; 2.2 %00截断 &#xff08;php5.2&#xff09; 2.3 user_init_ 2.4 3 图片码防御 4 竞争型漏洞 思路&#xff1a; 容易出现的问题: 1 前端和js校验 关闭JS的代码&#xff0c;上传PHP…

汉化版本 k6 dashboard

目前官方提供的 dashboard 只有英文版本&#xff0c;国内使用不方便&#xff0c;因此 fork 了下官方仓库&#xff0c;添加了汉化版本 https://github.com/kinghard7/xk6-dashboardhttps://github.com/kinghard7/xk6-dashboard安装 xk6 构建程序&#xff1a;go install go.k6.i…

视觉识别:ffmpeg-python、ultralytics.YOLO、OpenCV-Python、标准RTSP地址格式

视觉识别:ffmpeg-python、ultralytics.YOLO、OpenCV-Python、标准RTSP地址格式 ffmpeg-python 核心概念 常用过滤器(Filters) 高级操作 视频截帧转换图片示例 参考 ultralytics.YOLO(You Only Look Once) 1. 模型加载 2. 训练模型 (`train()`) 标准YAML格式示例 3. 预测 (…

浙江龙庭翔新型建筑材料有限公司全屋定制:畅享品质生活新境界!

在消费升级的时代浪潮中&#xff0c;浙江龙庭翔新型建筑材料有限公司以卓越的产品质量和创新的服务理念&#xff0c;重新定义全屋定制的内涵&#xff0c;为追求高品质生活的消费者打造理想家居。公司秉承"匠心质造&#xff0c;乐享生活"的核心价值观&#xff0c;将环…

鹰角网络基于阿里云 EMR Serverless StarRocks 的实时分析工程实践

一、客户背景与业务挑战 1.1 客户介绍 鹰角网络&#xff08;HYPERGRYPH&#xff09; 成立于2017年&#xff0c;总部位于上海&#xff0c;是中国知名游戏研发与发行公司&#xff0c;代表产品包括现象级手游《明日方舟》及《泡姆泡姆》《来自星辰》《终末地》等。公司依托阿里云…

LWIP的IP 协议栈

IP 协议栈 下面的分析把上文对 IPv4 概念的说明与 lwIP 中的具体实现代码对应起来&#xff0c;便于将理论与实现对照理解。分析覆盖&#xff1a;输入处理、路由与转发、输出与报文构建、分片/重组、校验和与各种配置点&#xff08;hook、选项、统计等&#xff09;。目录&#x…

高并发短信网关平台建设方案概述

本方案涵盖了架构设计、技术选型、核心功能、高可用保障以及实施路径,旨在构建一个能够应对千万级日吞吐量、稳定、安全、可扩展的现代短信网关平台。 高并发短信网关平台建设方案 一、 项目概述与目标 1.1 项目背景 为满足公司业务(如用户注册、登录、交易验证、营销通知…

阿里云服务-开启对象存储服务及获取AccessKey教程

&#xff08;1&#xff09;阿里云OSS简介 &#xff08;2&#xff09;打开阿里云网址&#xff1a;阿里云登录 - 欢迎登录阿里云&#xff0c;安全稳定的云计算服务平台 点击“立即开通” &#xff08;2&#xff09;开通成功后&#xff0c;充值任意金额 顶栏选择“费用”|“充值…

[特殊字符] 高可用高并发微服务架构设计:Nginx 与 API Gateway 的协同实践

一、Nginx 和 Gateway 的关系&#xff1a;是替代还是协作&#xff1f; 不是替代关系&#xff0c;而是协作关系。 1. Nginx 的角色&#xff08;通常在最外层&#xff09; 反向代理 & 负载均衡&#xff1a;将前端请求分发到多个后端服务或网关实例。 静态资源服务&#xf…

解码LLM量化:深入剖析最常见8位与4位核心算法

解码LLM量化&#xff1a;深入剖析8位与4位核心算法 大型语言模型&#xff08;LLM&#xff09;的性能日益强大&#xff0c;但其庞大的体积和高昂的计算成本构成了部署的主要障碍。模型量化&#xff0c;作为一种将高精度浮点权重&#xff08;如16位&#xff09;映射到低位宽整数&…

提问:温度不改变 logits 与概率的排名,为何还会影响模型输出?

你此前围绕温度的核心困惑始终是&#xff1a;“温度不改变 logits 与概率的排名&#xff0c;为何还会影响模型输出&#xff1f;” 以下总结将紧扣这一困惑&#xff0c;并重点补充核采样&#xff08;Top-p&#xff09;在其中的作用&#xff0c;明确温度与核采样如何共同影响输出…

【文献阅读】Lossless data compression by large models

1. 中华人工智能研究中心&#xff0c;郑州。 2. 鹏程实验室&#xff0c;深圳。 3. 上海数学与交叉学科研究所&#xff0c;上海。 4. 中国科学院计算技术研究所&#xff0c;北京。 5. 宁波人工智能产业研究所&#xff0c;宁波。 6. 滑铁卢大学计算机科学学院&#xff0c;加拿大安…

注意力机制:捕获长距离依赖关系的革命性技术

本文由「大千AI助手」原创发布&#xff0c;专注用真话讲AI&#xff0c;回归技术本质。拒绝神话或妖魔化。搜索「大千AI助手」关注我&#xff0c;一起撕掉过度包装&#xff0c;学习真实的AI技术&#xff01; ✨ 1. 注意力机制概述&#xff1a;为什么需要关注"长距离依赖&qu…

PHP如何使用JpGraph生成柱形图?

PHP使用JpGraph库生成各类统计图形具有显著优势&#xff0c;该库作为专业的PHP图表生成工具&#xff0c;能够高效创建包括折线图、饼图、散点图在内的多种数据可视化图形&#xff0c;其核心价值在于提供了丰富的图形定制能力和简洁的API接口。JpGraph通过纯PHP实现&#xff0c;…

免费的端口映射工具 ChmlFrp

免费的端口映射工具 ChmlFrp 前言&#xff1a;之前我写过一篇关于cloudflare tunnel的使用教程&#xff0c;ChmlFrp是一个类似的工具&#xff0c;也可以用来进行内网穿透 我的博客对应文章地址 1.注册账号 注册地址 点击这个链接前往官网注册一个账号&#xff0c;过程简单&…

遥感领域解决方案丨涵盖:高光谱、无人机多光谱、空天地数据识别与计算

一&#xff1a;AI智慧高光谱遥感实战&#xff1a;手撕99个案例项目、全覆盖技术链与应用场景一站式提升方案在遥感技术飞速发展的今天&#xff0c;高光谱数据以其独特的光谱分辨率成为环境监测、精准农业、地质勘探等领域的核心数据源。然而&#xff0c;海量的波段数据、复杂的…

中科米堆CASAIM自动化三维测量设备测量汽车壳体直径尺寸

随着新能源汽车产业向轻量化与高集成度发展&#xff0c;壳体作为电池组和电驱系统的核心承载部件&#xff0c;其孔位加工精度直接影响装配密封性及结构强度&#xff0c;传统人工测量方式已难以满足现代化生产需求。自动化三维测量设备的引入&#xff0c;为汽车壳体直径尺寸测量…

08.21总结

圆方树 引入 我们注意到&#xff0c;树结构相比普通图具有诸多优良特性。若能将在无向图上求解的问题转化为树结构问题&#xff0c;往往能大幅简化求解过程。圆方树正是实现这一转化的有效工具。 定义 我们称原图中的点为"圆点"。通过引入方点并调整边的关系&#xf…