高级爬虫——数据清洗与处理

news/2024/11/22 12:25:58/

数据清洗是数据处理和分析过程中极其重要的一环。爬取的原始数据往往会包含噪声、不完整性、不一致性等问题,因此清洗和规范化数据是获得高质量数据集的必要步骤。本节将详细介绍 Pandas 库的基本使用数据清洗的常用操作,结合代码实例,为开发者提供实用、可行的解决方案。


1. Pandas 库的基本使用

1.1 什么是 Pandas?

Pandas 是 Python 中用于数据分析和处理的高性能库,提供了丰富的工具来操作结构化数据和时间序列数据。Pandas 的核心数据结构是:

  • Series:一维数组,类似于 Python 列表或 NumPy 数组。
  • DataFrame:二维表格数据结构,类似于 Excel 表或 SQL 表。
1.2 安装 Pandas

确保 Pandas 已安装:

pip install pandas
1.3 加载与保存数据

Pandas 支持多种数据格式的读取与保存,包括 CSV、Excel、JSON、SQL 等。

  • 读取 CSV 文件

    python">import pandas as pd
    data = pd.read_csv('example.csv')
    print(data.head())  # 查看前 5 行数据
  • 保存数据为 CSV 文件

    python">data.to_csv('output.csv', index=False)  # index=False 不保存行号
  • 读取 Excel 文件

    python">data = pd.read_excel('example.xlsx')
  • 保存数据为 Excel 文件

    python">data.to_excel('output.xlsx', index=False)
1.4 DataFrame 的基本操作

以下是 Pandas DataFrame 的常见操作:

  1. 查看数据基本信息

    python">print(data.info())  # 显示数据类型、缺失值等信息
    print(data.describe())  # 数值列的统计信息
  2. 选择行和列

    python"># 选择列
    print(data['column_name'])# 选择多列
    print(data[['col1', 'col2']])# 选择行
    print(data.iloc[0])  # 第 1 行
    print(data.loc[2:5])  # 第 3 到第 6 行
  3. 筛选数据

    python">filtered_data = data[data['column_name'] > 100]  # 筛选出列值大于 100 的行
  4. 新增或修改列

    python">data['new_column'] = data['column_name'] * 2  # 添加一列,值为原列的 2 倍
  5. 删除行和列

    python">data.drop('column_name', axis=1, inplace=True)  # 删除列
    data.drop([0, 1], axis=0, inplace=True)  # 删除第 1 和第 2 行

2. 数据清洗的常用操作

2.1 缺失值处理

爬取的数据经常会有缺失值(NaN)。Pandas 提供多种方法处理缺失值。

  1. 检查缺失值

    python">print(data.isnull().sum())  # 每列缺失值统计
  2. 删除缺失值

    python">data.dropna(inplace=True)  # 删除包含缺失值的行
  3. 填充缺失值

    • 填充固定值:
      python">data['column_name'].fillna(0, inplace=True)
    • 使用列的均值、众数填充:
      python">data['column_name'].fillna(data['column_name'].mean(), inplace=True)
2.2 数据类型转换

Pandas 支持数据类型的转换,例如字符串转日期、浮点数转整数等。

  1. 转换数据类型

    python">data['column_name'] = data['column_name'].astype(int)  # 转为整数
  2. 字符串转日期

    python">data['date_column'] = pd.to_datetime(data['date_column'])
2.3 数据去重

爬取的原始数据中可能存在重复的行或字段,去重是必不可少的一步。

  1. 检查重复行

    python">print(data.duplicated().sum())  # 统计重复行数
  2. 删除重复行

    python">data.drop_duplicates(inplace=True)
2.4 数据格式化

将不规范的数据进行统一,例如清除多余空格、统一大小写等。

  1. 清除多余空格

    python">data['column_name'] = data['column_name'].str.strip()
  2. 统一大小写

    python">data['column_name'] = data['column_name'].str.lower()  # 转为小写
  3. 提取字符串中的特定信息: 使用正则表达式提取数据:

    python">data['extracted'] = data['column_name'].str.extract(r'(\d{4})')  # 提取年份

案例:数据清洗与处理的完整流程

以下是一个对爬取的电商数据进行清洗的案例:

原始数据示例
商品名称价格日期评价数折扣
iPhone 14$9992024-01-011.2kNone
Samsung Galaxy S$899N/A90010%
OnePlus 11$5992024-03-15None5%
清洗步骤
python">import pandas as pd# 1. 加载数据
data = pd.DataFrame({'商品名称': ['iPhone 14', 'Samsung Galaxy S', 'OnePlus 11'],'价格': ['$999', '$899', '$599'],'日期': ['2024-01-01', 'N/A', '2024-03-15'],'评价数': ['1.2k', '900', None],'折扣': [None, '10%', '5%']
})# 2. 清洗价格列(去除 $ 符号并转换为浮点数)
data['价格'] = data['价格'].str.replace('$', '').astype(float)# 3. 处理日期缺失值
data['日期'] = pd.to_datetime(data['日期'], errors='coerce')# 4. 转换评价数为数字
data['评价数'] = data['评价数'].str.replace('k', '000').astype(float)# 5. 填充缺失值
data['折扣'].fillna('0%', inplace=True)
data['折扣'] = data['折扣'].str.replace('%', '').astype(float)# 6. 检查与删除重复值(如有)
data.drop_duplicates(inplace=True)# 7. 清洗完成,展示结果
print(data)
清洗后数据
商品名称价格日期评价数折扣
iPhone 14999.02024-01-011200.00.0
Samsung Galaxy S899.0NaT900.010.0
OnePlus 11599.02024-03-15NaN5.0

总结

数据清洗与处理是数据分析的基础,Pandas 提供了强大的工具和灵活的 API,能够应对各种复杂的数据问题。通过熟练使用 Pandas 的清洗与格式化功能,开发者可以快速高效地将原始数据转化为结构化的、分析友好的数据集。


http://www.ppmy.cn/news/1549033.html

相关文章

字符串学习篇-java

API:应用程序编程接口。 ctrlaltv,自动生成一个变量接收数据 字符串: 注意点 创建string对象两种方式 1.直接赋值 2.构造器来创建 详情看黑马JAVA入门学习笔记7-CSDN博客 常用方法:比较 引用数据类型,比较的是地址值。 b…

短剧系统小程序开发产品设计实例解析

短剧系统小程序开发架构深度解析引言 随着数字娱乐市场的蓬勃发展,短剧因其紧凑的情节、创新的表现形式和便捷的观看体验,迅速吸引了大量观众的关注。作为承载短剧内容的重要平台,短剧系统小程序不仅需要在用户体验、内容管理等方面做到极致&…

华纳云:多IP服务器在网站SEO中的作用是什么

搜索引擎优化(SEO)已成为网站运营不可或缺的一部分。它不仅能够提升网站在搜索引擎结果页面(SERP)中的排名,还能有效增加网站的曝光度和流量。而多IP服务器作为一种高级的网络技术,在SEO策略中扮演着越来越重要的角色。多IP服务器是指一台物理服务器上配…

Android 从本地选择视频,用APP播放或进行其他处理

1.效果展示: 点击选择视频按钮后: 点击用相册打开后: 点击视频列表中的某个视频,会返回APP并自动播放所选视频 2.三步实现: 跳转到本地视频列表点击想播放的视频,带回所选视频数据播放该视频,…

基于SpringBoot+Vue的影院管理系统(含演示视频+运行截图+说明文档)

web启动链接地址: http://localhost:8082(管理端) http://localhost:8081(用户端) http://localhost:8082(员工端) 一、项目介绍 基于框架的系统,系统分为用户、员工和管理员三个…

Java-06 深入浅出 MyBatis - 一对一模型 SqlMapConfig 与 Mapper 详细讲解测试

点一下关注吧!!!非常感谢!!持续更新!!! 大数据篇正在更新!https://blog.csdn.net/w776341482/category_12713819.html 目前已经更新到了: MyBatis&#xff…

集合卡尔曼滤波(Ensemble Kalman Filter),用于二维滤波(模拟平面上的目标跟踪),MATLAB代码

集合卡尔曼滤波(Ensemble Kalman Filter) 文章目录 引言理论基础卡尔曼滤波集合卡尔曼滤波初始化预测步骤更新步骤卡尔曼增益更新集合 MATLAB 实现运行结果3. 应用领域结论 引言 集合卡尔曼滤波(Ensemble Kalman Filter, EnKF)是…

scPair:隐式特征选择提高single-cell paired多模态分析

配对多模态单细胞分析可在同一细胞中分析多模态特征,用于识别染色质和 mRNA 模态互补的细胞状态以及将调控元件与靶基因联系起来。然而,与单模态分析相比,输入特征的高维度和较浅的测序深度给数据分析带来了挑战。在这里,作者介绍…