电脑工具数据清洗如何清洗抓取杂乱数据

联启 电脑工具 1

本文目录导读:

电脑工具数据清洗如何清洗抓取杂乱数据-第1张图片-电脑手机工具软件下载 - 免费实用工具合集 | 联启科技

  1. 第一阶段:初步审查与概览
  2. 第二阶段:核心清洗步骤(按顺序进行)
  3. 第三阶段:高级清洗技巧
  4. 实战案例:清洗一段抓取的商品数据
  5. 清洗原则

数据清洗是数据分析中非常关键的一步,尤其是处理从网页、API或文档中抓取下来的“杂乱数据”,杂乱数据通常包括:缺失值、重复值、格式不一致、异常字符、无效空格、HTML标签、乱码等。

以下是使用电脑工具(主要以Excel、Python Pandas、以及一些常用的数据清洗函数) 进行数据清洗的实战流程和方法。

第一阶段:初步审查与概览

在清洗之前,先了解数据有多“脏”。

  1. 查看数据维度:多少行、多少列。
  2. 查看数据类型:数字被存成了文本?日期变成了字符串?
  3. 查看缺失值:哪些列有空值?占比多少?
  4. 查看重复值:是否存在完全重复的行?

工具操作

  • Excel:选中数据区域,按 Ctrl + T 创建表格,然后使用“排序和筛选”或“条件格式”来标记重复值。
  • Python
    import pandas as pd
    df = pd.read_csv('your_data.csv') # 或 pd.read_excel()
    print(df.info())  # 查看列名、非空数、数据类型
    print(df.describe()) # 查看数值列的统计信息
    print(df.isnull().sum()) # 每列缺失值数量
    print(df.duplicated().sum()) # 重复行数量

第二阶段:核心清洗步骤(按顺序进行)

处理缺失值

  • 直接删除:如果某一行缺失值过多,或该列缺失值占比超过70%,直接删除。
    • Excel:定位到空值 -> 删除行。
    • Pythondf.dropna(subset=['关键列'], inplace=True)df.dropna(thresh=len(df.columns)*0.6, inplace=True)
  • 填充:用均值、中位数、众数或特定字符填充。
    • Excel=IF(ISBLANK(A2), "未知", A2) 或查找替换空值。
    • Pythondf['年龄'].fillna(df['年龄'].median(), inplace=True)

处理重复值

  • 识别:根据“所有列”或“特定列”判断是否重复。
  • 操作:保留第一次出现的,删除后续重复。
    • Excel:数据 -> 删除重复值。
    • Pythondf.drop_duplicates(subset=['姓名', '手机号'], keep='first', inplace=True)

处理格式与文本混乱(最常遇到的抓取数据问题)

这是清洗的重点,常见问题包括:

A. 清除不可见字符和空格

  • 问题:数据前后有 \n\t\r 或全角空格。
  • Excel:使用 =TRIM(A1) 去除首尾空格,=CLEAN(A1) 去除非打印字符。
  • Python
    # 去除所有列的字符串空格和换行
    df['列名'] = df['列名'].str.strip().str.replace('\n', '').str.replace('\t', '').str.replace('\r', '')

B. 处理大小写与标准格式

  • 问题BeijingBEIJING 被认为是不同的。
  • Pythondf['城市'] = df['城市'].str.title()(首字母大写)或 str.upper()

C. 处理特殊符号与HTML标签

  • 问题:从网页抓取的数据带有 <br><p>&amp; 等。
  • Python(推荐使用 BeautifulSoupre 模块)
    import re
    df['文本'] = df['文本'].apply(lambda x: re.sub(r'<[^>]+>', '', str(x))) # 删除所有HTML标签
    df['文本'] = df['文本'].str.replace('&amp;', '&').replace('&nbsp;', ' ')

D. 处理不可见字符与乱码

  • 问题:抓取数据时由于编码问题出现 çæ±\u200b
  • Python
    df['列'] = df['列'].str.encode('ascii', 'ignore').str.decode('ascii') # 强制忽略非ASCII字符
    # 或者手动替换常见的Unicode控制字符
    df['列'] = df['列'].str.replace(r'[\u200b\u200c\u200d\ufeff]', '', regex=True)

E. 拆分与合并列

  • 问题:抓取时把“姓名-手机号”放在了一个单元格里。
  • Excel:数据 -> 分列(按分隔符或固定宽度)。
  • Pythondf[['姓名', '手机号']] = df['原始列'].str.split('-', expand=True)

处理数据类型异常

  • 问题:数字列里混入了“,”或“元”等中文,导致Excel无法求和。
  • Excel:选中列 -> 查找替换(将“,”替换为空,将“元”替换为空) -> 然后设置单元格格式为“数值”。
  • Python
    # 移除非数字字符并转为数值
    df['销售额'] = df['销售额'].str.replace('元', '').str.replace(',', '')
    df['销售额'] = pd.to_numeric(df['销售额'], errors='coerce') # coerce会将转换失败的设为NaN

处理日期格式

  • 问题2023/1/12023年1月1日01-01-2023 混在一起。
  • Excel:选中列 -> 数据 -> 分列 -> 日期格式(YMD)。
  • Python
    # 统一解析成标准日期格式
    df['日期'] = pd.to_datetime(df['日期'], errors='coerce', format='mixed')
    df['日期'] = df['日期'].dt.strftime('%Y-%m-%d') # 转为字符串标准格式

第三阶段:高级清洗技巧

基于规则的异常值清洗

  • 规则:年龄大于150,价格小于0,手机号不是11位。
  • Python
    # 将不合逻辑的年龄设为NaN
    df['年龄'] = df['年龄'].apply(lambda x: x if 0 < x < 120 else None)
    # 过滤掉价格小于0的行
    df = df[df['价格'] >= 0]

近似匹配与模糊清洗

  • 问题“北京”“北京市” 需要统一。
  • Python:先标准化,如 df['城市'] = df['城市'].str.replace('市', '')

实战案例:清洗一段抓取的商品数据

原始杂乱数据示例

商品名 价格 销量 详情
iPhone15,蓝色 6,999.00元 1,234件 <p>全新正品</p>
华为 Mate60 00 元 567 件 \n 鸿蒙系统\n
N/A null
小米14 白色 00元 2,345件 徕卡镜头

Python 完整清洗脚本

import pandas as pd
import re
# 1. 读取数据
df = pd.read_csv('商品数据.csv', encoding='utf-8')
# 2. 删除空行(商品名为空)
df.dropna(subset=['商品名'], inplace=True)
# 3. 处理重复(基于商品名和价格)
df.drop_duplicates(subset=['商品名', '价格'], inplace=True)
# 4. 清洗价格:去掉“元”,去掉逗号,转为数字
df['价格'] = df['价格'].astype(str).str.replace('元', '').str.replace(',', '').str.strip()
df['价格'] = pd.to_numeric(df['价格'], errors='coerce')
# 5. 清洗销量:去掉“件”,去掉空格,转为数字
df['销量'] = df['销量'].astype(str).str.replace('件', '').str.strip()
# 处理 'N/A' 或 '无'
df['销量'] = df['销量'].replace(['N/A', '无', 'null'], None)
df['销量'] = pd.to_numeric(df['销量'], errors='coerce')
# 6. 清洗详情:去除HTML标签、去除换行符、去除null字符串
def clean_text(text):
    if pd.isna(text) or text == 'null':
        return ''
    text = re.sub(r'<[^>]+>', '', str(text))  # 去HTML
    text = text.replace('\n', '').replace('\r', '').strip()
    return text
df['详情'] = df['详情'].apply(clean_text)
# 7. 重置索引
df = df.reset_index(drop=True)
# 8. 保存清洗后的数据
df.to_csv('商品数据_清洗后.csv', index=False, encoding='utf-8-sig')
print("清洗完成!")

清洗原则

  1. 先备份:在清洗前,永远保留一份原始数据副本,不要直接在源文件上改。
  2. 分步进行:不要试图一次性完成所有清洗,先处理缺失,再处理重复,再处理格式。
  3. 记录日志:使用Python脚本时,可以打印出“删除了多少行重复”、“填补了多少空值”,方便复盘。
  4. 追求一致:清洗的目标不是“完美”,而是“一致”,无论你统一用 “北京” 还是 “北京市”,只要统一就行。

掌握了上述方法,无论是从网页抓下来、从PDF抠出来,还是从各种接口拉回来的杂乱数据,都能有条不紊地处理干净。

标签: 数据预处理 文本规范化

抱歉,评论功能暂时关闭!