Python爬虫基础——数据清洗
主要内容:对采集到的原始数据中的缺失值、重复值、异常值或乱码,进行处理。
1、异常值的处理
1.1 读取数据
1.2处理异常值
1.2.1方法一、将异常值替换为控制,然后删除空值。
1.2.2方法二、将异常值替换为空值后继续宁数据插补
2、乱码的处理
2.1方法一
如果该网页的编码方式为GBK,使用get()函数获取到响应对象后,就可以通过对响应对象的encoding属性赋值,为响应对象指定编码格式。
2.2方法二
通过响应对象的apparent_encoding属性获取网页源码中书写的编码格式信息,这样就不需要通过开发者工具查看<meta>标签的编码格式信息。
还有一种常见乱码是以“\u”开头的十六进制字符串,需要通过编码转化的方式来解码。
##############################
##作者:白雪公主的后妈
##时间:2024年1月7日
##主题:Python爬虫基础——数据清洗
##主要内容:对采集到的原始数据中的缺失值、重复值、异常值或乱码,进行处理
##############################
#1、异常值的处理
#1.1 读取数据
import pandas as pd
data = pd.read_excel('E:\\python\\Python_Code\\Excel\\text.xlsx')
print(data)
'''
运行结果:
编号 产品 成本价(元/个) 销售价(元/个) 数量(个) 成本(元) 收入(元) 利润(元) 测试数
0 a001 背包 16 65 60 960 3900 2904 10
1 a002 钱包 90 187 50 4500 9350 4850 9
2 a003 背包 16 65 23 368 1495 1127 9
3 a004 手提包 36 147 26 936 3822 2886 8
4 a005 钱包 90 187 78 7020 14586 7566 12132
5 a006 单肩包 58 124 63 3654 7812 4158 5
6 a007 单肩包 58 124 58 3364 7192 3828 11
7 a001 背包 16 65 60 960 3900 2904 12
8 a002 钱包 90 187 50 4500 9350 4850 23
9 a003 背包 16 65 23 368 1495 1127 77
10 a004 手提包 36 147 26 936 3822 2886 201
11 a005 钱包 90 187 78 7020 14586 7566 11
12 a006 单肩包 58 124 63 3654 7812 4158 9
13 a007 单肩包 58 124 58 3364 7192 3828 8
'''
#1.2处理异常值 在测试数列中可以看到个别数差距很大,大部分价格在5~23之间处理异常值有两种方法
#方法一、将异常值替换为控制,然后删除空值。
# data["测试数"][data["测试数"]>23]=None #将“测试数”列中大于23的替换为空值
# data.loc[data["测试数"] > 23, "测试数"] = None
# print(data.dropna()) #删除空值所在的行
'''
运行结果:
编号 产品 成本价(元/个) 销售价(元/个) 数量(个) 成本(元) 收入(元) 利润(元) 测试数
0 a001 背包 16 65 60 960 3900 2904 10.0
1 a002 钱包 90 187 50 4500 9350 4850 9.0
2 a003 背包 16 65 23 368 1495 1127 9.0
3 a004 手提包 36 147 26 936 3822 2886 8.0
5 a006 单肩包 58 124 63 3654 7812 4158 5.0
6 a007 单肩包 58 124 58 3364 7192 3828 11.0
7 a001 背包 16 65 60 960 3900 2904 12.0
8 a002 钱包 90 187 50 4500 9350 4850 23.0
11 a005 钱包 90 187 78 7020 14586 7566 11.0
12 a006 单肩包 58 124 63 3654 7812 4158 9.0
13 a007 单肩包 58 124 58 3364 7192 3828 8.0
'''
#方法二、将异常值替换为空值后继续宁数据插补
data.loc[data["测试数"] > 23, "测试数"] = None
print(data.fillna(data["测试数"].mean())) #对空值所在的位置进行插补
#2、乱码的处理
#2.1方法一
'''
如果该网页的编码方式为GBK,使用get()函数获取到响应对象后,就可以通过对响应对象的encoding属性赋值,为响应对象指定编码格式
'''
#response.encoding="gbk"
#这样无论响应头中是否包含编码格式信息,响应对象的text属性都能正确的解码
#2.2方法二
'''
通过响应对象的apparent_encoding属性获取网页源码中书写的编码格式信息,这样就不需要通过开发者工具查看<meta>标签的编码格式信息。
'''
# response.encoding=response.apparent_encoding
#还有一种常见乱码是以“\u”开头的十六进制字符串,需要通过编码转化的方式来解码。
str_16_1="b'\\u4f60\\u597d'"
str_16_2=str_16_1.encode('utf-8').decode('unicode-escape') #进行编码转化
print(str_16_2) #转化结果是"b'你好'"
'''
运行结果:
b'你好'
'''