数据处理常用方法及示例——Python数据清洗

Python用request获取到的网页数据常常要经过筛选处理,转化为我们需要的数据之后再保存到本地,但有些数据过于杂乱要经过多步处理才能转化为我们所需的数据,其实这也算是一种反爬措施。今天总结一些常用的数据处理方法,涉及到 re 正则库和 xpath(lxml库)语法

一、str.replace() ---- 替换

描述

Python中 replace() 方法把字符串中的 old(旧字符串) 替换成 new(新字符串),如果指定第三个参数max,则替换不超过 max 次,返回一个字符串。

语法

str.replace(old, new[, max])

参数
  • old – 将被替换的子字符串。
  • new – 新字符串,用于替换old子字符串。
  • max – 可选字符串, 替换不超过 max 次
示例

注意:字符串中的 \n 在输出时有换行效果

str_data = 'Who is he?与世间美好is环环相扣\n Hello, I am a blogger'

print(str_data.replace('is',''))    # 将is替换为空
print(str_data.replace('is','I',1)) # 将is替换为I,并且只替换1次
print(str_data.replace('环环相扣\n','\n'))  # 将环环相扣\n替换为\n
输出结果
Who  he?与世间美好环环相扣
 Hello, I am a blogger
Who I he?与世间美好is环环相扣
 Hello, I am a blogger
Who is he?与世间美好is
 Hello, I am a blogger

二、str.split() ---- 拆分

描述

Python中 split() 是通过指定分隔符对字符串进行切片,且可以指定分隔n+1个字符串,并返回分割后的字符串列表(list)。

语法

str.split(s, num)[n]

参数
  • s – 指定的分隔符,不写的话,默认是空格(‘ ’)。当str字符串中不存在指定的分隔符时,则把str整个字符串作为列表的一个元素返回。
  • num – 分割次数,默认为-1,即分隔所有,可省略,如果指定了参数num,就会将字符串分割成num+1个子字符串
  • [n] – 表示选取第n个子串,n表示返回的list中元素下标(从0开始);可省略(省略时则得到所有分片)

(注意:指定的分隔符将不会存在结果列表中)

示例
str1="html boy<[www.baidu.com]>\tbye\nbye"

print(str1.split())   # 分隔符默认为所有的空字符(换行符,制表符)
print(str1.split("[")[1].split("]")[0])   # 注意这里的到的结果是一个str类型的

str2 = 'dhjgkl,dhg/d,hdh:计算机5,54'

print(str2.split(',',2))    # 以逗号分割且只分割2次
print(str2.split('g'))      #以 g 为分隔符
print(str2.split('g')[0])      #以 g 为分隔符其只获取第一个分片
输出结果
['html', 'boy<[www.baidu.com]>', 'bye', 'bye']
www.baidu.com
['dhjgkl', 'dhg/d', 'hdh:计算机5,54']
['dhj', 'kl,dh', '/d,hdh:计算机5,54']
dhj

三、re.split() ---- 拆分

注:使用re.split(),需要引入re库(import re)
re.split() 和str.split()很相似,主要区别:前者是根据正则表达式分割字符串,相比后者显著提升了字符分割能力。如果没有使用特殊符号表示正则表达式来匹配多个模式,那么re.split()和string.split()功能是一样的。str.split不支持正则表达式及多个切割符号,只适用单一分隔符情况。

re.split() 支持多个分隔符,适用复杂的分隔情况,原型: re.split(pattern, string, maxsplit=0) 通过正则表达式将字符串分离。如果用括号将正则表达式括起来,那么匹配的字符串也会被列入到list中返回。maxsplit是分割的次数(可省略),默认不限制分割次数。

示例
import re   # 导入库

str1 = '!y!w @m%w^w'

# 单字符切割
print(re.split(r'\s', str1))      # 以\s(空格)分割str1字符串,r:防转义
# 两个字符以上切割需要放在 [ ] 中
print(re.split(r'[!@%^]', str1))     # 匹配多个字符分割,r:防转义

#不保留匹配项
m1 = re.split(r'\d+', '123abc321cba')
print(m1)

#保留匹配项时给匹配项添加括号()
m2 = re.split(r'(\d+)', '1ac3cba')
print(m2)
输出结果
['!y!w', '@m%w^w']
['', 'y', 'w ', 'm', 'w', 'w']
['', 'abc', 'cba']
['', '123', 'abc', '321', 'cba']

未完,待续…

关于博主

最近挺忙的,还有一些常用方法后面有时间了再添加进来!

发布了21 篇原创文章 · 获赞 28 · 访问量 5263

猜你喜欢

转载自blog.csdn.net/weixin_42365530/article/details/103546697