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

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

数据清洗是数据处理和分析过程中极其重要的一环。爬取的原始数据往往会包含噪声、不完整性、不一致性等问题,因此清洗和规范化数据是获得高质量数据集的必要步骤。本节将详细介绍 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 文件

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

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

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

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

以下是 Pandas DataFrame 的常见操作:

  1. 查看数据基本信息

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

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

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

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

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

2. 数据清洗的常用操作

2.1 缺失值处理

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

  1. 检查缺失值

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

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

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

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

  1. 转换数据类型

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

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

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

  1. 检查重复行

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

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

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

  1. 清除多余空格

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

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

    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%
清洗步骤
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.kler.cn/a/410499.html

相关文章:

  • 101页PDF | 德勤_XX集团信息化顶层规划设计信息化总体解决方案(限免下载)
  • python(四)os模块、sys模块
  • 软件/游戏提示:mfc42u.dll没有被指定在windows上运行如何解决?多种有效解决方法汇总分享
  • 大语言模型(LLM)安全:十大风险、影响和防御措施
  • 第四讲:数据类型与变量:基本数据类型、变量声明与初始化
  • 【第十课】Rust并发编程(一)
  • 学习内容分享
  • Http文件上传
  • 【数据结构与算法】合并链表、链表分割、链表回文结构
  • hhdb数据库介绍(10-6)
  • 【每天学点AI】实战图像增强技术在人工智能图像处理中的应用
  • 从尾到头打印链表 剑指offer
  • 嵌入式系统与单片机工作原理详解
  • gitee仓库的推送教程
  • 大数据新视界 -- Hive 数据桶原理:均匀分布数据的智慧(上)(9/ 30)
  • Zustand:一个轻量级的React状态管理库
  • Predicting Goal-directed Attention Control Using Inverse-Reinforcement Learning
  • 安装 Docker(使用国内源)
  • 修改bag的frame_id的工具srv_tools
  • 136.flask内置jinja2模版使用
  • 【随手笔记】GUI上位机选择
  • react和vue图片懒加载及实现原理
  • springboot项目使用maven打包,第三方jar问题
  • Java基础--输入输出
  • STM32 Keil5 attribute 关键字的用法
  • Java爬虫:数据采集的强大工具