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

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


1. Pandas 库的基本使用

1.1 什么是 Pandas?

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

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

确保 Pandas 已安装:

bash 复制代码
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 $999 2024-01-01 1.2k None
Samsung Galaxy S $899 N/A 900 10%
OnePlus 11 $599 2024-03-15 None 5%
清洗步骤
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 14 999.0 2024-01-01 1200.0 0.0
Samsung Galaxy S 899.0 NaT 900.0 10.0
OnePlus 11 599.0 2024-03-15 NaN 5.0

总结

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

相关推荐
小白也有IT梦3 分钟前
Python 虚拟环境使用指南
python
晚安,cheems7 分钟前
c++(入门)
开发语言·c++
小乖兽技术8 分钟前
C#13新特性介绍:LINQ 的优化设计
开发语言·c#·linq
Mcworld85715 分钟前
C语言:strcpy
c语言·开发语言
知识鱼丸26 分钟前
【数据结构】一图介绍python数据结构
数据结构·python
风华浪浪40 分钟前
python之poetry 安装、创建项目、修改源、创建虚拟环境等操作
python
人才程序员43 分钟前
详解Qt QStorageInfo 存储信息类
c语言·开发语言·c++·后端·qt·界面
ZHOUPUYU1 小时前
最新‌VSCode保姆级安装教程(附安装包)
c语言·开发语言·c++·ide·windows·vscode·编辑器
__lost1 小时前
Python 使用 OpenCV 将 MP4 转换为 GIF图
开发语言·python·opencv
霍夫曼vx_helloworld73521 小时前
(二)手势识别——动作模型训练【代码+数据集+python环境(免安装)+GUI系统】
开发语言·python