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

Python 数据分析与可视化 Day 2 - 数据清洗基础

🎯 今日目标

  • 学会识别和处理缺失数据(NaN)
  • 学会删除/填补缺失值
  • 清理重复数据
  • 修改列类型,准备数据分析

🧼 一、缺失值处理(NaN)

✅ 1. 检查缺失值
import pandas as pd
df = pd.read_csv("students.csv")print(df.isnull())        # 每个元素是否为 NaN
print(df.isnull().sum())  # 每列缺失值数量
✅ 2. 删除缺失数据
df.dropna()            # 删除包含 NaN 的行
df.dropna(axis=1)      # 删除包含 NaN 的列

inplace=True 参数可以就地修改,不返回新对象。

✅ 3. 填充缺失数据
df.fillna(0)               # 全部填 0
df["成绩"].fillna(df["成绩"].mean())   # 用均值填充
df.fillna(method="ffill")  # 用上一行填
df.fillna(method="bfill")  # 用下一行填

🔁 二、重复值处理

✅ 1. 检测重复数据

df.duplicated()            # 标记每行是否重复(默认所有列)
df.duplicated(subset=["姓名"])  # 指定列检查

✅ 2. 删除重复数据

df.drop_duplicates(inplace=True)

🔧 三、数据类型转换

df["成绩"] = df["成绩"].astype(float)
df["是否及格"] = df["是否及格"].astype(bool)

可以使用 df.dtypes 查看所有列的数据类型。


🧪 今日练习任务

使用以下示例数据,完成清洗操作:

姓名,性别,成绩,是否及格
张三,男,88,True
李四,女,,True
王五,男,59,False
张三,男,88,True
赵六,,92,True
田七,女,NaN,

📝 任务:

  1. 加载该 CSV 文件为 DataFrame

  2. 检查每列缺失值数量

  3. 删除性别缺失的行

  4. 用“成绩”列均值填补成绩缺失值

  5. 删除重复的行(姓名、成绩相同)

  6. 将“成绩”列类型设置为 float,将“是否及格”填补为 False

    import pandas as pd
    import os# 路径设置
    input_path = "./data/students_dirty.csv"
    output_path = "./data/students_cleaned.csv"# 确保输出目录存在
    os.makedirs(os.path.dirname(output_path), exist_ok=True)# 加载原始数据
    df = pd.read_csv(input_path)
    print("原始数据:")
    print(df)# 1. 检查每列缺失值数量
    print("\n缺失值统计:")
    print(df.isnull().sum())# 2. 删除性别缺失的行
    df = df.dropna(subset=["性别"])# 3. 用“成绩”列均值填补缺失值
    # 保留整数部分,四舍五入到整数
    mean_score = df["成绩"].mean().round()
    df["成绩"] = df["成绩"].fillna(mean_score)# 4. 删除重复的行(默认检查所有列)
    df = df.drop_duplicates()# 5. 填补“是否及格”空缺值为 False
    with pd.option_context("future.no_silent_downcasting", True):df = df.fillna(False).infer_objects(copy=False)# 6. 数据类型转换
    df["成绩"] = df["成绩"].astype(float)
    df["是否及格"] = df["是否及格"].astype(bool)# 显示清洗结果
    print("\n清洗后的数据:")
    print(df)# 保存结果
    df.to_csv(output_path, index=False, encoding="utf-8")
    print(f"\n✅ 清洗后的数据已保存至 {output_path}")
    

    ✅ 示例输出(清洗后)

    原始数据:姓名   性别    成绩   是否及格
    0  张三    男  88.0   True
    1  李四    女   NaN   True
    2  王五    男  59.0  False
    3  张三    男  88.0   True
    4  赵六  NaN  92.0   True
    5  田七    女   NaN    NaN缺失值统计:
    姓名      0
    性别      1
    成绩      2
    是否及格    1
    dtype: int64清洗后的数据:姓名 性别    成绩   是否及格
    0  张三  男  88.0   True
    1  李四  女  78.0   True
    2  王五  男  59.0  False
    5  田七  女  78.0  False✅ 清洗后的数据已保存至 ./data/students_cleaned.csv
    
         姓名 性别    成绩 是否及格
    0    张三  男  88.0   True
    1    李四  女  79.7   True
    2    王五  男  59.0  False
    3    田七  女  79.7  False
    

    在这里插入图片描述


✍️ 今日总结

  • 掌握了 dropna()fillna()drop_duplicates() 等数据清洗方法
  • 学会判断和填补缺失值
  • 理解了数据类型转换在分析前的重要性
http://www.lqws.cn/news/448669.html

相关文章:

  • 基于深度学习的特征映射模块(FMS)实现与分析
  • 医疗AI大数据处理流程的全面解析:从数据源到应用实践
  • Spring IOC详解:从原理到实战
  • .NET基于类名约定的自动依赖注入完整指南
  • 【AI时代速通QT】第二节:Qt SDK 的目录介绍和第一个Qt Creator项目
  • node.js在vscode的配置
  • 大气商务工作汇报总结PPT模版分享
  • 华为云Flexus+DeepSeek征文 | 利用Dify平台构建多智能体协作系统:从单体到集群的完整方案
  • 以太坊节点搭建私链(POA)
  • davinci本地启动
  • 全面掌握 C++ 基础:关键特性与进化
  • uni-app-配合iOS App项目开发apple watch app
  • 巧用云平台API实现开源模型免费调用的实战教程
  • 电子电气架构 --- 软件供应商如何进入OEM体系
  • Git 命令全景图:从 clone 到 merge 的完整流程解析
  • 基于深度学习的智能视频行为识别系统:技术与实践
  • 【音视频 | RTP】RTP协议详解(H.264的RTP封包格式、AAC的RTP封包格式)
  • CSS3 3D 转换
  • GitHub Copilot 是什么,怎么使用
  • 上海人工智能实验室明珠湖会议首开,解答AI前沿疑问,推进科学智能
  • 【新手向】GitHub Desktop 的使用说明(含 GitHub Desktop 和 Git 的功能对比)
  • java面试题02访问修饰符有哪些?区别是什么?
  • 如何自建服务器并开启公网IP:本地内网网址让外网访问详细教学
  • 华为CE交换机抓包
  • 如何导出和迁移离线 Conda 环境
  • Java八股文——数据结构「排序算法篇」
  • 【目标检测】什么是目标检测?应用场景与基本流程
  • Spring 中的依赖注入(DI)详解
  • Transformer实战——Hugging Face环境配置与应用详解
  • 【编译原理】语句的翻译