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

Python Pandas数据清洗与处理

Python Pandas数据清洗与处理

在进行数据分析时,原始数据往往包含了许多不完整、不准确或者冗余的信息。数据清洗与处理的任务就是将这些杂乱无章的数据清理干净,确保数据的准确性和一致性,从而为后续的分析工作打下坚实的基础。Pandas提供了强大的工具来帮助我们清洗和处理数据,尤其是在处理Series和DataFrame时,它能够高效地进行数据的筛选、填充、删除、替换等操作。

本节将通过一些常见的数据清洗与处理操作,展示如何使用Pandas的Series和DataFrame对数据进行处理。

示例数据集

为了演示数据清洗与处理的操作,首先我们构造一个包含10条测试数据的DataFrame,其中包含一些常见的数据问题,如缺失值、重复值和异常值。

import pandas as pd
import numpy as np

# 构造测试数据
data = {
    '姓名': ['张三', '李四', '王五', '赵六', '王五', '李四', '赵六', '周七', '郑八', np.nan],
    '年龄': [23, 25, np.nan, 29, 30, 25, 29, 24, 28, 23],
    '性别': ['男', '女', '男', '男', '男', '女', '男', '男', '女', np.nan],
    '工资': [5000, 6000, 7000, 8000, 7000, 6000, 8000, np.nan, 5000, 7000]
}

# 创建DataFrame
df = pd.DataFrame(data)

# 打印原始数据
print("原始数据:")
print(df)

输出结果如下:

原始数据:
    姓名    年龄 性别    工资
0   张三  23.0   男  5000.0
1   李四  25.0   女  6000.0
2   王五   NaN   男  7000.0
3   赵六  29.0   男  8000.0
4   王五  30.0   男  7000.0
5   李四  25.0   女  6000.0
6   赵六  29.0   男  8000.0
7   周七  24.0   男    NaN
8   郑八  28.0   女  5000.0
9  NaN  23.0 NaN  7000.0

这个数据集中,我们可以看到有缺失值、重复值以及一些无效的数据(如姓名、性别为空值)。

数据清洗与处理操作

在Pandas中,有许多方法可以帮助我们对这些问题进行清洗。接下来我们将对这些数据进行常见的清洗操作,包括缺失值处理、重复值处理、异常值处理等。

1. 处理缺失值

缺失值是数据清洗过程中常见的问题,Pandas提供了多种方法来处理缺失值,例如使用fillna()进行填充,或者使用dropna()删除包含缺失值的行。

(1)删除包含缺失值的行

我们可以使用dropna()方法来删除包含缺失值的行。以下是删除包含缺失值的行的代码示例:

# 删除包含缺失值的行
df_cleaned = df.dropna()

# 打印删除后的数据
print("\n删除包含缺失值的行后的数据:")
print(df_cleaned)

代码解析

  1. df.dropna():此方法删除DataFrame中任何含有缺失值的行。
  2. dropna()默认会删除所有含有缺失值的行,如果需要删除含有缺失值的列,可以设置axis=1

输出结果如下:

删除包含缺失值的行后的数据:
    姓名    年龄 性别    工资
0   张三  23.0   男  5000.0
1   李四  25.0   女  6000.0
3   赵六  29.0   男  8000.0
4   王五  30.0   男  7000.0
5   李四  25.0   女  6000.0
6   赵六  29.0   男  8000.0
8   郑八  28.0   女  5000.0
(2)填充缺失值

另外,如果希望保留包含缺失值的行,但希望填充缺失值,可以使用fillna()方法。例如,可以使用均值、中位数或指定的常数来填充缺失值。

# 使用年龄列的均值填充缺失值
df['年龄'] = df['年龄'].fillna(df['年龄'].mean())

# 使用工资列的中位数填充缺失值
df['工资'] = df['工资'].fillna(df['工资'].median())

# 打印填充后的数据
print("\n填充缺失值后的数据:")
print(df)

代码解析

  1. df['年龄'].fillna(df['年龄'].mean()):通过fillna()方法,用年龄列的均值填充缺失值。
  2. df['工资'].fillna(df['工资'].median()):使用工资列的中位数填充缺失值。

输出结果如下:

填充缺失值后的数据:
    姓名    年龄 性别    工资
0   张三  23.0   男  5000.0
1   李四  25.0   女  6000.0
2   王五  27.0   男  7000.0
3   赵六  29.0   男  8000.0
4   王五  30.0   男  7000.0
5   李四  25.0   女  6000.0
6   赵六  29.0   男  8000.0
7   周七  24.0   男  6500.0
8   郑八  28.0   女  5000.0
9  NaN  23.0 NaN  7000.0
2. 处理重复值

数据中有时会出现重复记录,这时候可以使用drop_duplicates()方法来去除重复的行。以下是删除重复行的代码示例:

# 删除重复的行
df_cleaned = df.drop_duplicates()

# 打印删除后的数据
print("\n删除重复值后的数据:")
print(df_cleaned)

代码解析

  1. df.drop_duplicates():此方法会删除DataFrame中完全相同的行,保留唯一的记录。

输出结果如下:

删除重复值后的数据:
    姓名    年龄 性别    工资
0   张三  23.0   男  5000.0
1   李四  25.0   女  6000.0
2   王五  27.0   男  7000.0
3   赵六  29.0   男  8000.0
4   王五  30.0   男  7000.0
5   李四  25.0   女  6000.0
6   赵六  29.0   男  8000.0
7   周七  24.0   男  6500.0
8   郑八  28.0   女  5000.0
9  NaN  23.0 NaN  7000.0
3. 处理异常值

数据中的异常值可能会影响分析的准确性,我们可以通过各种方法来识别和处理异常值,例如将不合理的数据替换为NaN,或者将其替换为合理的值。

例如,如果我们认为年龄不应小于18岁,可以通过以下方式替换小于18岁的年龄为NaN:

# 将年龄小于18岁的值替换为NaN
df['年龄'] = df['年龄'].apply(lambda x: np.nan if x < 18 else x)

# 打印处理后的数据
print("\n处理异常值后的数据:")
print(df)

代码解析

  1. df['年龄'].apply(lambda x: np.nan if x < 18 else x):通过apply()方法,使用lambda函数将年龄小于18的数据替换为NaN。

输出结果如下:

处理异常值后的数据:
    姓名    年龄 性别    工资
0   张三  23.0   男 

http://www.kler.cn/a/519470.html

相关文章:

  • .NET9增强OpenAPI规范,不再内置swagger
  • 验证二叉搜索树(力扣98)
  • npm启动前端项目时报错(vue) error:0308010C:digital envelope routines::unsupported
  • 网络模型简介:OSI七层模型与TCP/IP模型
  • kotlin内联函数——let,run,apply,also,with的区别
  • 積分方程與簡單的泛函分析8.具連續對稱核的非齊次第II類弗雷德霍姆積分算子方程
  • RabbitMQ---面试题
  • Pyecharts图表交互功能提升
  • vue3+elementPlus之后台管理系统(从0到1)(day4-完结)
  • 在Ubuntu上安装RabbitMQ教程
  • Go语言快速开发入门
  • 微信开发者工具的快捷键
  • ray.rllib-入门实践-12:自定义policy
  • Maui学习笔记-SignalR简单介绍
  • MySQL中的读锁与写锁:概念与作用深度剖析
  • 延迟之争:LLM服务的制胜关键
  • Linux系统之gzip命令的基本使用
  • C++ 与机器学习:构建高效推理引擎的秘诀
  • Gary Marcus对2025年AI的25项预测:AGI的曙光仍未到来?
  • C语言I/O请用递归实现计算 :1 + 1/3 - 1/5 + 1/7 - 1/9 + .... 1/n 的值,n通过键盘输入
  • SpringBoot基础概念介绍-数据源与数据库连接池
  • An OpenGL Toolbox
  • mysql 学习6 DML语句,对数据库中的表进行 增 删 改 操作
  • 设计模式的艺术-代理模式
  • 2024-2025年终总结
  • 使用vscode + Roo Code (prev. Roo Cline)+DeepSeek-R1使用一句话需求做了个实验