一、数据清洗
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,而不是抛出异常,这是处理脏数据的**好帮手