数据清洗是数据分析过程中至关重要的一环,也是初学者最容易忽视的步骤。本文将详细介绍如何使用Pandas进行数据清洗,涵盖空值处理、日期格式修正、错误数据识别和重复数据删除四大核心内容。

1. Pandas 清洗空值

空值是数据集中最常见的问题之一,Pandas提供了多种处理空值的方法。

1.1 检测空值

import pandas as pd# 创建示例DataFrame
data = {'姓名': ['张三', '李四', None, '王五'],'年龄': [25, None, 30, 22],'成绩': [90, 85, None, 95]}
df = pd.DataFrame(data)# 检测空值
print(df.isnull())
print(df.isnull().sum())  # 每列空值数量统计

 Pandas 把 n/a 和 NA 当作空数据,na 不是空数据,可以指定空数据类型:

import pandas as pd
missing_values = ["n/a", "na", "--"]
df = pd.read_csv('property-data.csv', na_values = missing_values)
print (df['NUM_BEDROOMS'])
print (df['NUM_BEDROOMS'].isnull())

1.2 处理空值的方法

方法一:删除空值

# 删除包含空值的行
df_drop = df.dropna()
print(df_drop)# 删除全为空值的列
df_drop_col = df.dropna(axis=1, how='all')

方法二:填充空值 

# 用固定值填充
df_fill = df.fillna(0)# 用列的平均值填充
df['年龄'] = df['年龄'].fillna(df['年龄'].mean())# 用前一个有效值填充
df_fill_ffill = df.fillna(method='ffill')# 用后一个有效值填充
df_fill_bfill = df.fillna(method='bfill')

2. Pandas 清洗格式错误日期

日期格式不一致是常见的数据问题,Pandas提供了强大的日期处理功能。

2.1 统一日期格式

# 创建含不同日期格式的DataFrame
date_data = {'日期': ['2023-01-01', '01/02/2023', '2023.03.01', '20230401', '2023/05/01']}
df_date = pd.DataFrame(date_data)# 统一转换为datetime格式
df_date['标准日期'] = pd.to_datetime(df_date['日期'], errors='coerce')
print(df_date)

2.2 处理日期异常 

# 识别异常日期(如未来日期)
today = pd.to_datetime('today')
df_date['是否异常'] = df_date['标准日期'] > today# 提取日期组成部分
df_date['年份'] = df_date['标准日期'].dt.year
df_date['月份'] = df_date['标准日期'].dt.month
df_date['日'] = df_date['标准日期'].dt.day

3. Pandas 清洗错误数据

错误数据可能包括异常值、不合理值或拼写错误等。

3.1 识别错误数据

# 创建示例数据
data = {'姓名': ['张三', '李四', '王五', '赵六', '钱七'],'年龄': [25, 30, 150, 22, -5],  # 包含不合理年龄'性别': ['男', '女', '男', '未知', '女']}  # 包含不规范性别
df_error = pd.DataFrame(data)# 设置合理年龄范围
valid_age = (df_error['年龄'] > 0) & (df_error['年龄'] < 120)
print(df_error[~valid_age])

3.2 修正错误数据 

# 替换不合理年龄为NaN
df_error.loc[~valid_age, '年龄'] = None# 标准化性别列
gender_map = {'男': '男', '女': '女', '未知': '其他'}
df_error['性别'] = df_error['性别'].map(gender_map).fillna('其他')# 使用条件替换
df_error['年龄'] = df_error['年龄'].apply(lambda x: x if 0 < x < 120 else None)

4. Pandas 清洗重复数据

重复数据会扭曲分析结果,需要谨慎处理。

4.1 检测重复数据

# 创建含重复数据的DataFrame
data = {'姓名': ['张三', '李四', '王五', '张三', '李四'],'年龄': [25, 30, 22, 25, 30],'成绩': [90, 85, 95, 90, 85]}
df_dup = pd.DataFrame(data)# 检测完全重复的行,如果对应的数据是重复的,**duplicated()** 会返回 True,否则返回 False。
print(df_dup.duplicated())# 检测特定列的重复
print(df_dup.duplicated(subset=['姓名', '年龄']))

4.2 处理重复数据 

# 删除完全重复的行
df_no_dup = df_dup.drop_duplicates()# 保留第一次出现的重复行
df_first = df_dup.drop_duplicates(keep='first')# 保留最后一次出现的重复行
df_last = df_dup.drop_duplicates(keep='last')# 基于某些列删除重复行
df_specific = df_dup.drop_duplicates(subset=['姓名', '年龄'])

综合应用实例 

# 综合数据清洗流程示例
def clean_data(df):# 处理空值df['年龄'] = df['年龄'].fillna(df['年龄'].median())df = df.dropna(subset=['姓名'])# 修正错误数据df['年龄'] = df['年龄'].apply(lambda x: x if 0 < x < 120 else None)# 删除重复数据df = df.drop_duplicates(subset=['姓名', '年龄'], keep='first')return dfcleaned_df = clean_data(df)
print(cleaned_df)

总结

数据清洗是数据分析的基础,本文介绍了Pandas在数据清洗中的四大核心应用:

  1. 空值处理:检测和填充/删除空值

  2. 日期格式化:统一日期格式,处理异常日期

  3. 错误数据修正:识别和修正异常值、不合理数据

  4. 重复数据处理:检测和删除重复数据

掌握这些技巧,你将能够处理大多数常见的数据质量问题,为后续的数据分析打下坚实基础。记住,没有"干净"的数据,就没有可靠的分析结果!

 

 

 

 

 

 

 

 

 

 

 

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

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

相关文章

C++容器之 forward_list (单向链表)使用说明

目录 1. 语法格式 2. 说明 3. 用法示例 1. 语法格式 描述控制可变长度元素序列的对象。该序列存储为单向(前向)链接的节点列表&#xff0c;每个节点包含一个 Type 类型的成员。 template <class Type, class Allocator allocator<Type>> class forward_lis…

ali 轻量服务器安装nginx

# Ubuntu sudo apt install nginx-light # 精简版 # CentOS sudo yum install nginx #启动并设置开机自启 sudo systemctl daemon-reload sudo systemctl start nginx sudo systemctl enable nginx #验证安装 nginx -v curl -I 127.0.0.1 #常用命令&#xff1a; # 重新加载配…

【设计模式】4.代理模式

every blog every motto: You can do more than you think. https://blog.csdn.net/weixin_39190382?typeblog 0. 前言 代理模式 1. 第一版 class SchoolGirl:def __init__(self):self._name Nonepropertydef name(self):return self._namename.setterdef name(self, valu…

基于微信小程序的美食点餐订餐系统

文章目录 1. 项目概述2. 项目思维导图3. 系统架构特点4. 核心模块实现代码1. 登录注册2. 首页模块实现4. 分类模块实现5. 购物车模块实现6. 订单模块实现 5. 注意事项6. 项目效果截图7. 关于作者其它项目视频教程介绍 1. 项目概述 在移动互联网时代&#xff0c;餐饮行业数字化…

[neo4j]介绍4个开源的知识图谱项目

项目主要介绍几个开源项目&#xff1a; QASystemOnMedicalKG&#xff1a;医疗知识图谱问答 https://github.com/liuhuanyong/QASystemOnMedicalKG Agriculture_KnowledgeGraph&#xff1a;农业知识图谱 Financial-Knowledge-Graphs&#xff1a;小型金融知识图谱 stock-know…

20倍光学镜头怎么实现20+20倍数实现

1. 硬件选择 球机摄像头 选择40倍光学变焦的摄像头 &#xff1a;确保摄像头具有足够的变焦能力&#xff0c;同时考虑摄像头的分辨率、帧率、夜视功能等。 内置云台 &#xff1a;许多高端摄像头已经内置了云台功能&#xff0c;如果是这样&#xff0c;可以简化机械设计和电机控制…

Axios 在 Vue3 项目中的使用:从安装到组件中的使用

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》、《前端求职突破计划》 &#x1f35a; 蓝桥云课签约作者、…

【Python打卡Day50】预训练模型与CBAM注意力@浙大疏锦行

现在我们思考下&#xff0c;是否可以对于预训练模型增加模块来优化其效果&#xff0c;这里我们会遇到一个问题: 预训练模型的结构和权重是固定的&#xff0c;如果修改其中的模型结构&#xff0c;是否会大幅影响其性能。其次是训练的时候如何训练才可以更好的避免破坏原有的特征…

ONLYOFFICE Jira 集成应用程序 4.0.0 发布,含新的文件格式支持等多个重大更新!

ONLYOFFICE 与 Jira 集成的重大更新现已发布&#xff01;使用 ONLYOFFICE Docs 在 Jira Software 中处理各种办公文档&#xff0c;从 4.0.0 版本开始&#xff0c;ONLYOFFICE 连接器允许您编辑 PDF 文件和表单、直接从编辑器创建新文件、可视化用户头像、在 Jira 平台内处理新文…

安装区块链相关Geth(基于CentOS7)

注&#xff1a;由于版本冲突问题&#xff0c;请严格按如下介绍版本进行安装 安装所需资料&#xff1a;通过网盘分享的文件&#xff1a;区块链_CSDN 链接: https://pan.baidu.com/s/1dn5xcLtwwFy90xhOWKiWyA?pwdzgzs 提取码: zgzs --来自百度网盘超级会员v6的分享 一、安装运…

系统分析师——计算机系统基础

系统分析师——计算机系统基础 引言 作为系统分析师学习的第一节课&#xff0c;计算机系统基础部分构建了整个知识体系的核心框架。本文将围绕计算机系统的层次结构、硬件组成、软件分类以及关键技术点进行详细总结&#xff0c;为后续深入学习奠定基础。 本节学习内容如下图&…

JS常用设计模式汇总

1、基于类的单例模式 // PageManager.js class PageManager {constructor(config) {if (!PageManager.instance) {this.config config;this.initialized false;PageManager.instance this;this.init();}return PageManager.instance;}init() {if (this.initialized) return…

迈向软件开发 T 型人才之路:构建多元能力体系

在软件开发的广袤天地里&#xff0c;T 型人才备受瞩目。这类人才犹如具备强大能量的 “多面手”&#xff0c;既有深入专精的技术能力&#xff0c;又有广泛多元的知识与技能储备&#xff0c;能够从容应对复杂多变的项目需求&#xff0c;引领行业创新发展。于当今社会而言&#x…

SALMONN-omni论文阅读

论文链接 项目链接 名词理解&#xff1a; backchanneling&#xff1a; 指的是听话人在不打断说话人的情况下&#xff0c;用简短的语气词或动作表示“我在听”“我理解了”的反馈。 常见示例包括&#xff1a; “嗯哼”&#xff08;“uh-huh”&#xff09; “对的”&#xff08…

区块链:什么是DeFi?

DeFi&#xff08;去中心化金融&#xff0c;Decentralized Finance&#xff09; 是一种基于区块链技术的金融生态系统&#xff0c;旨在通过去中心化的方式提供传统金融服务&#xff08;如借贷、交易、储蓄等&#xff09;&#xff0c;无需依赖银行、经纪商等中介机构。DeFi主要构…

idea编译器使用git拉取、提交非常慢的原因和解决方案

前言 最近在公司换了一个电脑,但是发现这个电脑用idea编译器使用git拉取、提交各种操作非常慢,有时候需要等10分钟左右,这明显是不对劲的,说明电脑的某些环境影响到git和idea之间的整合了。 目录 在idea拉取代码非常慢的原因 解决方案 在idea拉取代码非常慢的原因 经过排查…

C语言变量的奇妙世界:探秘作用域

资料合集下载链接: ​​https://pan.quark.cn/s/472bbdfcd014​​ 在C语言的编程世界里,变量是我们存储和操作数据的基础。然而,仅仅知道如何定义和使用变量是远远不够的。一个更深层次的理解,在于掌握变量的“作用域”——也就是变量在程序中可以被访问和使用的范围。这就…

恒流源和直流稳压电源 电路

目录 前言一、恒流源电路1.低端反馈2.低端反馈注意事项注意1&#xff1a;电阻Rx注意2&#xff1a;三极管和运放的限制 3.高端反馈注意&#xff1a;自激振荡方案二 二、直流稳压电源电流1.带反馈2.不带反馈3.区别 前言 基础知识可以看个人笔记&#xff1a;个人笔记 一、恒流源…

那些年,曾经辉煌过的数据库

滚滚长江东逝水&#xff0c;浪花淘尽英雄&#xff01; 数据库的演进史&#xff0c;正是这样一部“英雄迭代”的壮阔史诗。从早期数据模型的拓荒者&#xff0c;到关系型数据库的商业巨头&#xff1b;从桌面应用的普及者&#xff0c;再到开源与大数据时代的弄潮儿&#xff1b;每…

2D曲线点云平滑去噪

2D曲线点云&#xff0c;含许多噪声&#xff0c;采用类似移动最小二乘的方法&#xff08;MLS)分段拟合抛物线并投影至抛物线&#xff0c;进行点云平滑去噪。 更通俗的说法是让有一定宽度的曲线点云&#xff0c;变成一条细曲线上的点。 分两种情况进行讨论&#xff1a; 1&#…