机器学习之数据清洗(Machine Learning about Data Cleaning)

一、数据清洗

1、基础知识

1.1 数据清洗的用途

爬虫获取的原始数据往往存在各种问题:

  • HTML标签残余
  • 空格换行不一致
  • 编码混乱
  • 格式不一致
  • 有缺失值

这些问题如果不解决,将会影响后续的数据分析与挖掘工作。数据清洗是整个爬虫项目不可或缺的一环,其决定了最终数据的质量。

💡数据清洗不是一次性工作,而是需要根据实际需求分析需求反复迭代的过程。

1.2 常见数据问题与解决方案

问题一:多余空格和换行

字符串前后的空白字符是爬虫数据中最常见的问题。使用 str.strip() 能够去除首尾空格:

df'name' = df'name'.str.strip()

问题二:HTML标签残留

从网页直接提取的文本可能包含未解析的HTML标签,使用正则表达式可以清除它们:

df'content' = df'content'.str.replace(r'<\^\>+>', '', regex=True)

问题三:提取数字或特定格式

有时需要从混合文本里提取出特定的信息,比如从"¥666元",里面提取数字:

df'price_num' = df'price'.str.extract(r'(\d+)')0.astype(float)

问题四:文本格式不统一

对于城市名称,有时需要大小写进行区分,因此需要进行 upper、title 或 lower 等操作:

df'city' = df'city'.str.title() # 首字母大写,其余小写
df'city' = df'city'.str.upper() # 全部大写
df'city' = df'city'.str.lower() # 全部小写

1.3 缺失值处理

现实数据里面往往会有缺失值(NaN)的出现,因此需要对其进行相关处理:

|------------------------|-------------|----------|
| 方法 | 说明 | 适用场景 |
| df.fillna(value) | 使用指定值进行填充缺失 | 缺失有明确的含义 |
| df.dropna(value) | 删除包含缺失值的行 | 缺失数据较少时 |
| dfcol.fillna(mean) | 用均值/中位数填充 | 数值型字段 |

python 复制代码
# 查看每列的缺失值数量
df.isnull().sum()

# 用0填充缺失值
df.fillna(0)

# 删除有缺失值的行
df.dropna()

# 用均值填充数据型缺失值
df['score'].fillna(df['score'].mean())

💡实战建议:先使用df.isnull().sum()了解缺失情况,再决定处理策略。如果某列缺失率超过50%,通常考虑删除该列而非填充。

1.4 数据类型转换

有时需要提取数据类型,不符合预期,例如有时需要数字类型,但爬虫数据是字符串类型:

python 复制代码
# 转换为数值型
df['age'] = pd.to_numeric(df['age'], errors='coerce')

# 转换为日期型
df['date'] = pd.to_datetime(df['date'], errors='coerce')

# 转换为字符串
df['phone'] = df['phone'].astype(str)

💡注意:errors='coerce'参数会在转换失败时将值设为NaN,而不是抛出异常,这是处理脏数据的**好帮手

相关推荐
Shockang10 小时前
llama.cpp 本地运行 9B 模型:部署、工具调用与微调数据
人工智能
Shockang10 小时前
n8n 智能体工作流实战:触发、工具、记忆与发布护栏
人工智能
冬奇Lab12 小时前
开源项目第241期:YuE2 —— 用符号乐谱当“白盒“接口的开源音乐生成模型,SongBench 超越 Suno v5/v6
人工智能
鶴哥只手遮天13 小时前
Spring AI 2.0.1 深度解析-第 14 章 MCP 服务端(上):注解式实现与工具来源
java·人工智能·开源
鶴哥只手遮天13 小时前
Spring AI 2.0.1 深度解析-第 15 章 MCP 服务端(下):三种协议形态、Streamable 传输与状态管理
java·人工智能·开源
鶴哥只手遮天13 小时前
Spring AI 2.0.1 深度解析-第 16 章 向量存储(上):`VectorStore` 接口体系、`BatchingStrategy`
java·人工智能·开源
鶴哥只手遮天13 小时前
Spring AI 2.0.1 深度解析-第 12 章 工具循环的流式形态、Usage 累加与扩展体系
java·人工智能·开源
鶴哥只手遮天13 小时前
Spring AI 2.0.1 深度解析-第 23 章 模型供应商实现:从 `OpenAiSetup` 到 Bedrock
java·人工智能·开源
鶴哥只手遮天13 小时前
Spring AI 2.0.1 深度解析-第 06 章 内置 Advisor 全景:13 个实现逐个剖到源码级
java·人工智能·开源