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

爬虫数据清洗:Pandas 处理缺失值与异常

在网络爬虫实战中,爬取到的原始数据往往存在字段缺失、格式混乱、数值异常、重复冗余等问题,直接用于分析或入库会严重影响结果准确性。Pandas 作为 Python 数据处理的核心库,提供了简洁高效的缺失值与异常值处理方案。本文从爬虫场景出发,系统讲解如何用 Pandas 完成数据清洗关键步骤。

一、爬虫数据为什么必须做清洗?

爬虫数据天生 “不干净”,常见问题包括:

  • 部分页面加载失败,导致字段为空(None''NaN
  • 反爬机制触发,返回占位符或无效字符
  • 网页结构变更,部分字段抓取不到
  • 数值型数据混入文字、符号,出现极端异常值
  • 重复请求造成重复数据

未经清洗的数据会导致:统计错误、模型失效、入库失败、业务决策偏差。因此,数据清洗是爬虫流程中必不可少的一环

二、环境准备与数据读入

首先安装并导入依赖库,读取爬虫保存的 CSV/Excel 原始数据:

python

运行

import pandas as pd import numpy as np # 读取爬虫数据(CSV/Excel) df = pd.read_csv("spider_data.csv") # 查看数据基本信息 df.head() df.info() df.describe()

三、缺失值识别与处理

1. 缺失值识别

Pandas 提供快速定位缺失值的方法:

python

运行

# 查看每列是否存在缺失 df.isnull().sum() # 查看缺失值占比 df.isnull().mean() * 100 # 筛选存在缺失的行 df[df.isnull().any(axis=1)]

爬虫中常见的 “伪缺失”:空字符串、-暂无null字符串,需先统一转为NaN

python

运行

# 将自定义缺失标记转为 NaN df.replace(["", "-", "暂无", "null", "None"], np.nan, inplace=True)

2. 缺失值处理策略

根据业务场景选择处理方式:

(1)删除缺失值

适用于缺失比例低、字段不重要的场景:

python

运行

# 删除包含任何缺失的行 df.dropna(inplace=True) # 只删除指定列缺失的行 df.dropna(subset=["title", "price"], inplace=True) # 缺失占比过高直接删列 df.drop(columns=["useless_col"], inplace=True)
(2)填充缺失值

分类字段:用众数、固定值填充

python

运行

df["category"].fillna("其他", inplace=True) df["source"].fillna(df["source"].mode()[0], inplace=True)

数值字段:用均值、中位数、0 填充

python

运行

df["price"].fillna(df["price"].median(), inplace=True) df["view_count"].fillna(0, inplace=True)

时间 / 文本字段:向前 / 向后填充

python

运行

df["publish_time"].fillna(method="ffill", inplace=True) # 前向填充 df["content"].fillna("无描述", inplace=True)

四、异常值识别与处理

异常值指明显偏离正常范围的数据(如价格为负数、浏览量超大、日期异常),是爬虫数据高频问题。

1. 异常值常用检测方法

(1)描述统计筛选

python

运行

# 查看数值列极值 df.describe() # 筛选异常范围数据 abnormal_price = df[(df["price"] < 0) | (df["price"] > 100000)]
(2)四分位数(IQR)法

适用于连续数值,自动识别离群点:

python

运行

def detect_abnormal_iqr(data, col): Q1 = data[col].quantile(0.25) Q3 = data[col].quantile(0.75) IQR = Q3 - Q1 lower = Q1 - 1.5 * IQR upper = Q3 + 1.5 * IQR return data[(data[col] < lower) | (data[col] > upper)] # 调用检测 abnormal = detect_abnormal_iqr(df, "price")

2. 异常值处理方案

  • 删除异常行:明显错误且无法修正
  • 替换为合理值:用均值、中位数、边界值覆盖
  • 标记为异常:新增列标注,不删除原数据

python

运行

# 价格异常替换为中位数 df.loc[df["price"] > 10000, "price"] = df["price"].median() # 新增异常标记列 df["is_abnormal"] = np.where(df["view_count"] > 1000000, 1, 0)

五、爬虫数据清洗通用流程

实际项目中推荐固定清洗 pipeline:

  1. 读取爬虫原始数据
  2. 统一列名、去除无用列
  3. 转换数据类型(字符串转数值、时间格式化)
  4. 处理缺失值(识别→替换→填充 / 删除)
  5. 处理异常值(检测→修正 / 标记)
  6. 去重、格式统一
  7. 输出清洗后数据

python

运行

# 最终去重 df.drop_duplicates(subset=["url"], inplace=True) # 保存清洗结果 df.to_csv("spider_data_clean.csv", index=False, encoding="utf-8-sig")

六、总结

Pandas 为爬虫数据清洗提供了一站式解决方案:

  • 缺失值:先识别占比,再按字段类型选择删除 / 填充
  • 异常值:用统计方法定位,结合业务逻辑修正
  • 核心原则:不盲目删数据、不随意填值,始终贴合爬虫业务场景

掌握这套方法,能大幅提升爬虫数据质量,为后续数据分析、可视化、机器学习打下坚实基础。

http://www.jsqmd.com/news/385237/

相关文章:

  • 实用指南:[linux仓库]线程池[线程玖]
  • 爬虫结果存入 MySQL:批量插入优化
  • [嵌入式系统-215]:线性电源与开关电源各自的工作原理,通俗易懂
  • nodejs+vue3的玉米病虫害远程咨询系统的 小程序
  • [嵌入式系统-214]:线性电源与开关电源
  • nodejs+vue3的社区儿童玩具交易系统
  • nodejs+vue3的社区外来人员登记管理系统 流动人口管理系统
  • nodejs+vue3的旅游民宿预定管理系统的设计与实现
  • nodejs+vue3的校园服务平台的设计与实现
  • nodejs+vue3的企业固定资产管理系统
  • nodejs+vue3的地方扶贫管理系统
  • 集体好奇心推动团队的创新驱动
  • 大数据领域Kafka的消息堆积问题解决
  • 从线性模型到S型曲线:广告投入与销售增长关系的系统建模
  • 【linux项目】2-9 k8s集群rancher界面的搭建以及本地habor镜像仓库的部署深度解析:原理、实战与踩坑记录
  • 加入L-Tester开源任务:自动化测试平台
  • nodejs+vue3的社区桶装饮用水预购管理系统的设计与实现
  • nodejs+vue3的社区电动车充电预约管理系统的设计与实现
  • 浅谈大数据领域主数据管理的重要性和价值
  • Springboot3+vue3微信小程序的计算机软考模拟系统的设计与实现
  • 2026中专大数据管理与应用专业学数据分析的技术价值分析
  • 2026大专计算机专业学生学数据分析的实用性分析
  • HDU.3991 Harry Potter and the Present II
  • nodejs+vue3地铁站点管理系统 地铁线路推荐系统
  • 明天就过年了,你敢不敢问自己这3个问题?
  • 【AI大模型】一文彻底解析Transformer - 多头注意力(Multi-Head Attention)
  • 《AI应用架构师揭秘:AI在医疗工作流程中的创新应用秘籍》
  • 大数据领域数据产品的文档编写与规范要求
  • 各AI厂商在春节抢夺C端用户市场, 顺便做生态连接,A/B testing
  • Windows11 Ubuntu22.04 双系统