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

Pandas 数据清洗

数据清洗是数据分析过程中至关重要的一环,也是初学者最容易忽视的步骤。本文将详细介绍如何使用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.lqws.cn/news/478657.html

相关文章:

  • Java设计模式之适配器模式
  • Linux 内核配置核心文件config与流程
  • MATLAB的readmatrix函数
  • Electron架构深度解析:用Web技术构建桌面应用的桥梁
  • 什么是缺口箱线图?如何绘制?
  • .Net 9.0环境下WebApi发布到IIS
  • VB.NET,C#在线程中修改UI的安全操作
  • rknn优化教程(三)
  • WEB3开启 Hardhat 自动验证有什么意义
  • uview ui request get / post 传参含params和json数据的分析和使用
  • 【Redis】解码Redis中hash类型:理解基础命令,以及内部编码方式和使用场景
  • 原创模板--微信小程序 实现的背单词程序
  • 62-Oracle ADR(Automatic Diagnostic Repository)
  • 二、Generative adversarial network (GAN)
  • Spring Boot Actuator 跟踪HTTP请求和响应
  • 【数据结构与算法】数据结构初阶:详解顺序表和链表(一)
  • C++,Qt事件处理机制编程开发练习全解析,23000字解析!!
  • RabbitMQ从入门到实践:消息队列核心原理与典型应用场景
  • Oracle 数据库查询:单表查询
  • 嵌入式通信协议框架的四层架构设计与实现
  • 【云原生】Docker 部署 Elasticsearch 9 操作详解
  • 华为OD-2024年E卷-字符串化繁为简[200分] -- python
  • 「Linux文件及目录管理」vi、vim编辑器
  • Ragflow 源码:task_executor.py
  • Sqlserver 设置对特定数据库特定表只读访问权限
  • 1928: 日期差值 codeup
  • MySQL安装与配置【windowsMac】
  • Unity3D仿星露谷物语开发69之动作声音
  • Unity Addressable使用之服务器远程加载
  • leetcode:面试题 08.01. 三步问题