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

爬完数据就完了?用 Pandas 做数据清洗与预处理

不少人用爬虫获取数据后,就觉得 “数据到手,分析无忧”,但打开数据表才发现 —— 空值占了半列、重复数据堆成山、日期是 “字符串” 格式、数值里混着特殊符号…… 这些 “脏数据” 会直接导致后续分析结果失真,甚至让整个项目白费功夫。而 Pandas,正是 Python 中解决数据清洗与预处理的核心工具,能帮我们把 “乱糟糟” 的数据变成 “可用、可靠” 的分析素材。

一、先搞懂:为什么必须做数据清洗与预处理?

爬取的原始数据,本质是 “未经筛选的原始素材”,存在大量影响分析的问题。不做清洗直接用,会带来两大风险:

  1. 分析结果失真:比如用含大量空值的 “用户消费数据” 计算平均值,结果会远低于真实水平;用重复数据统计 “用户数量”,会导致用户规模虚高。
  2. 后续操作报错:比如把字符串格式的 “日期” 传入时间序列分析模型,会直接触发类型错误;异常值(如 “年龄 = 200 岁”)会让机器学习模型训练偏离方向。

简单说:数据清洗是 “排除错误”,预处理是 “优化格式”,两者共同决定了数据分析的基础质量。

二、Pandas 数据清洗:搞定 3 类核心问题

Pandas 提供了简洁的 API,能高效解决原始数据中最常见的 “缺失值、重复值、异常值” 问题,以下是实操步骤:

1. 缺失值处理:补全或删除,避免数据浪费

首先要定位缺失值,再根据业务场景选择处理方式:

  • 第一步:检测缺失值isnull().sum()统计每列缺失值数量,用info()查看数据整体非空情况,快速判断缺失严重程度。示例代码:

    python

    运行

    import pandas as pd
    df = pd.read_csv("爬取的数据.csv")  # 读取数据
    print(df.isnull().sum())  # 输出每列缺失值个数
    print(df.info())  # 查看数据类型与非空数
    
  • 第二步:处理缺失值
    • 缺失少(占比 <5%):数值型数据用 “均值 / 中位数” 填充(df['列名'].fillna(df['列名'].mean(), inplace=True)),分类数据用 “众数” 填充(df['列名'].fillna(df['列名'].mode()[0], inplace=True))。
    • 缺失多(占比 > 30%):直接删除该列(df.drop('列名', axis=1, inplace=True)),避免填充带来的误差。

2. 重复值处理:去重后再分析,避免数据冗余

重复数据会导致统计结果重复计算(比如同一用户被多次计入 “活跃用户数”),处理步骤如下:

  • 第一步:检测重复值duplicated().sum()统计重复行数量,用df[df.duplicated()]查看具体重复内容。示例代码:

    python

    运行

    print(df.duplicated().sum())  # 输出重复行总数
    print(df[df.duplicated()])  # 查看所有重复行
    
  • 第二步:删除重复值drop_duplicates(inplace=True)直接删除重复行,默认保留第一行;若需根据指定列判断重复(如 “用户 ID”),可加参数subset=['用户ID']。示例代码:

    python

    运行

    df.drop_duplicates(subset=['用户ID'], inplace=True)  # 按用户ID去重
    

3. 异常值处理:识别 “离谱数据”,减少干扰

异常值是指明显偏离正常范围的数据(如 “工资 = 100 元 / 月”“身高 = 3 米”),处理步骤如下:

  • 第一步:检测异常值describe()查看数值型数据的 “均值、标准差、最值”,若最值明显超出合理范围(如 “年龄最大值 = 200”),则可能存在异常值;也可用箱线图可视化(df['列名'].boxplot()),图中 “圆点” 即为异常值。示例代码:

    python

    运行

    print(df['年龄'].describe())  # 查看年龄的统计信息
    df['年龄'].boxplot()  # 绘制年龄箱线图
    
  • 第二步:处理异常值常用 “四分位距(IQR)法” 筛选正常数据范围,超出范围的视为异常值并删除。示例代码(处理年龄异常值):

    python

    运行

    Q1 = df['年龄'].quantile(0.25)  # 第一四分位数
    Q3 = df['年龄'].quantile(0.75)  # 第三四分位数
    IQR = Q3 - Q1  # 四分位距
    # 保留在 [Q1-1.5*IQR, Q3+1.5*IQR] 范围内的数据
    df = df[(df['年龄'] >= Q1 - 1.5*IQR) & (df['年龄'] <= Q3 + 1.5*IQR)]
    

三、Pandas 数据预处理:让数据 “适配” 分析需求

清洗完 “错误数据” 后,还需通过预处理让数据格式、量级适配后续分析(如建模、可视化),核心操作有两类:

1. 数据类型转换:让数据 “归位”

爬取的数据常出现 “类型错配”—— 比如日期是字符串(object类型)、数值是文本(如 “100 元”),需转换为正确类型:

  • 日期类型转换:用to_datetime()将字符串日期转为datetime类型,方便后续时间序列分析。示例代码:

    python

    运行

    df['日期'] = pd.to_datetime(df['日期'])  # 字符串转日期
    
  • 数值类型转换:先清理数值中的非数字字符(如 “100 元”→“100”),再用astype()转为int/float类型。示例代码:

    python

    运行

    df['金额'] = df['金额'].str.replace('元', '').astype(float)  # 清理字符并转数值
    

2. 数据标准化 / 归一化:消除量级影响

若数据量级差异大(如 “用户年龄:0-100”“用户消费:0-10000”),会影响聚类、回归等模型的结果,需通过标准化 / 归一化统一量级:

  • 标准化(Z-Score):将数据转为 “均值 = 0,标准差 = 1” 的分布,适合正态分布数据。示例代码:

    python

    运行

    from sklearn.preprocessing import StandardScaler
    scaler = StandardScaler()
    df['消费_标准化'] = scaler.fit_transform(df[['消费']])
    
  • 归一化(Min-Max):将数据压缩到 “0-1” 区间,适合非正态分布数据。示例代码:

    python

    运行

    from sklearn.preprocessing import MinMaxScaler
    min_max_scaler = MinMaxScaler()
    df['消费_归一化'] = min_max_scaler.fit_transform(df[['消费']])
    

四、总结:数据清洗与预处理,是分析的 “地基”

爬取数据只是第一步,真正的数据分析从 “清洗与预处理” 开始 —— 没有干净、规范的数据,再复杂的分析模型也只是 “空中楼阁”。而 Pandas 凭借简洁的 API,能帮我们高效解决缺失值、重复值、异常值等问题,让数据从 “能用” 变成 “好用”。

建议大家养成习惯:爬取数据后,先跑一遍 “缺失值→重复值→异常值→类型转换” 的流程,再进入后续的可视化或建模环节,这样才能保证分析结果的可靠性。

http://www.dtcms.com/a/533071.html

相关文章:

  • nestjs 架构篇:控制器、服务、数据访问
  • 【STM32】CLion STM32开发环境搭建
  • 电子商务网站开发系统平台湖北建设厅网站查询
  • 如何网站建设团队盲盒怎么制作教程
  • 网站建设北京贵金华竞价排名 金华企业网站建设
  • 腾讯微信山东区建站推广中心网站建设与管理 自考
  • 从 Thread 到 Executor 框架
  • 万字细啄常见排序算法
  • 大连网站设计收费标准海口网站建设咨询
  • 网站如何做3d产品展示做软件的公司网站有哪些
  • 装修网站制作dede电影网站源码
  • 公司网站建网电脑版微信登录入口
  • Linux C/C++ 学习日记(35):协程(五):同步、多线程、多协程在IO密集型场景中的性能测试
  • PantherX2 debain/armbian 命令无法安装Jellyfin10.11的解决办法
  • 系统架构设计师PPT课件
  • 网上书城 网站建设策划书网站流量指的是什么意思
  • NewStarCTF2025-Week3-Web
  • AI好像除了不能解决业务问题,其他问题都能解决
  • VBA技术资料MF386:贪吃蛇游戏
  • 一级域名的网站怎么做网站等保如何做
  • 网站规划与建设参考文献重庆注册公司核名在哪个网站
  • Perplexity薅羊毛攻略:安装comet失败解决以及奖励获取
  • 上海建设钢结构工程网站wordpress资讯APP
  • Linux中系统调用sys_mount函数的实现
  • 邢台网站定制做网站找那些公司
  • 天津做网站建设的公司沧州网站建设联系电话
  • 使用VisualVM进行java性能瓶颈定位 1.无需像JProfiler那样必须加启动参数???
  • 五金 东莞网站建设wordpress注册简化
  • 好用的苏州GEO多渠道优化推广哪个公司好
  • Arduino无人机操控系统开发实战指南