一、数据清洗
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) | 删除包含缺失值的行 | 缺失数据较少时 |
| df[col].fillna(mean) | 用均值/中位数填充 | 数值型字段 |
# 查看每列的缺失值数量 df.isnull().sum() # 用0填充缺失值 df.fillna(0) # 删除有缺失值的行 df.dropna() # 用均值填充数据型缺失值 df['score'].fillna(df['score'].mean())💡实战建议:先使用df.isnull().sum()了解缺失情况,再决定处理策略。如果某列缺失率超过50%,通常考虑删除该列而非填充。
1.4 数据类型转换
有时需要提取数据类型,不符合预期,例如有时需要数字类型,但爬虫数据是字符串类型:
# 转换为数值型 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,而不是抛出异常,这是处理脏数据的好帮手