python数据清洗系列之字符串处理详解


Posted in Python onFebruary 12, 2017

前言

数据清洗是一项复杂且繁琐(kubi)的工作,同时也是整个数据分析过程中最为重要的环节。有人说一个分析项目80%的时间都是在清洗数据,这听起来有些匪夷所思,但在实际的工作中确实如此。数据清洗的目的有两个,第一是通过清洗让数据可用。第二是让数据变的更适合进行后续的分析工作。换句话说就是有”脏”数据要洗,干净的数据也要洗。

在数据分析中,特别是文本分析中,字符处理需要耗费极大的精力,因而了解字符处理对于数据分析而言,也是一项很重要的能力。

字符串处理方法

首先我们先了解下都有哪些基础方法

python数据清洗系列之字符串处理详解

首先我们了解下字符串的拆分split方法

str='i like apple,i like bananer'
print(str.split(','))

对字符str用逗号进行拆分的结果:

['i like apple', 'i like bananer']

print(str.split(' '))

根据空格拆分的结果:

['i', 'like', 'apple,i', 'like', 'bananer']

print(str.index(','))
print(str.find(','))

两个查找结果都为:

12

找不到的情况下index返回错误,find返回-1

print(str.count('i'))

结果为:

4

connt用于统计目标字符串的频率

print(str.replace(',', ' ').split(' '))

结果为:

['i', 'like', 'apple', 'i', 'like', 'bananer']

这里replace把逗号替换为空格后,在用空格对字符串进行分割,刚好能把每个单词取出来。

除了常规的方法以外,更强大的字符处理工具费正则表达式莫属了。

正则表达式

在使用正则表达式前我们还要先了解下,正则表达式中的诸多方法。

python数据清洗系列之字符串处理详解

下面我来看下个方法的使用,首先了解下match和search方法的区别

str = "Cats are smarter than dogs"
pattern=re.compile(r'(.*) are (.*?) .*')
result=re.match(pattern,str)

for i in range(len(result.groups())+1):
 print(result.group(i))

结果为:

Cats are smarter than dogs
Cats
smarter

这种形式的pettern匹配规则下,match和search方法的的返回结果是一样的

此时如果把pattern改为

pattern=re.compile(r'are (.*?) .*')

match则返回none,search返回结果为:

are smarter than dogs
smarter

接下来我们了解下其他方法的使用

str = "138-9592-5592 # number"
pattern=re.compile(r'#.*$')
number=re.sub(pattern,'',str)
print(number)

结果为:

138-9592-5592

以上是通过把#号后面的内容替换为空实现提取号码的目的。

我们还可以进一步对号码的横杆进行替换

print(re.sub(r'-*','',number))

结果为:

13895925592

我们还可以用find的方法把找到的字符串打印出来

str = "138-9592-5592 # number"
pattern=re.compile(r'5')
print(pattern.findall(str))

结果为:

['5', '5', '5']

正则表达式的整体内容比较多,需要我们对匹配的字符串的规则有足够的了解,下面是具体的匹配规则。

python数据清洗系列之字符串处理详解

矢量化字符串函数

清理待分析的散乱数据时,常常需要做一些字符串规整化工作。

data = pd.Series({'li': '120@qq.com','wang':'5632@qq.com',
 'chen': '8622@xinlang.com','zhao':np.nan,'sun':'5243@gmail.com'})
print(data)

结果为:

python数据清洗系列之字符串处理详解

可以通过规整合的一些方法对数据做初步的判断,比如用contains 判断每个数据中是否含有关键词

print(data.str.contains('@'))

结果为:

python数据清洗系列之字符串处理详解

也可以对字符串进行分拆,把需要的字符串提取出来

data = pd.Series({'li': '120@qq.com','wang':'5632@qq.com',
     'chen': '8622@xinlang.com','zhao':np.nan,'sun':'5243@gmail.com'})
pattern=re.compile(r'(\d*)@([a-z]+)\.([a-z]{2,4})')
result=data.str.match(pattern) #这里用fillall的方法也可以result=data.str.findall(pattern)
print(result)

结果为:

chen [(8622, xinlang, com)]
li [(120, qq, com)]
sun [(5243, gmail, com)]
wang [(5632, qq, com)]
zhao NaN
dtype: object

此时加入我们需要提取邮箱前面的名称

print(result.str.get(0))

结果为:

python数据清洗系列之字符串处理详解

或者需要邮箱所属的域名

print(result.str.get(1))

结果为:

python数据清洗系列之字符串处理详解

当然也可以用切片的方式进行提取,不过提取的数据准确性不高

data = pd.Series({'li': '120@qq.com','wang':'5632@qq.com',
    'chen': '8622@xinlang.com','zhao':np.nan,'sun':'5243@gmail.com'})
print(data.str[:6])

结果为:

python数据清洗系列之字符串处理详解

最后我们了解下矢量化的字符串方法

python数据清洗系列之字符串处理详解

总结

以上就是python数据清洗之字符串处理的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流。

Python 相关文章推荐
零基础写python爬虫之抓取百度贴吧并存储到本地txt文件改进版
Nov 06 Python
详解Python中的序列化与反序列化的使用
Jun 30 Python
python中 chr unichr ord函数的实例详解
Aug 06 Python
详解python里使用正则表达式的全匹配功能
Oct 19 Python
Python下载网络小说实例代码
Feb 03 Python
使用django-crontab实现定时任务的示例
Feb 26 Python
Pycharm在创建py文件时,自动添加文件头注释的实例
May 07 Python
Python随机生成身份证号码及校验功能
Dec 04 Python
python+opencv 读取文件夹下的所有图像并批量保存ROI的方法
Jan 10 Python
python程序 线程队列queue使用方法解析
Sep 23 Python
使用Python打造一款间谍程序的流程分析
Feb 21 Python
Python自动化办公Excel模块openpyxl原理及用法解析
Nov 05 Python
python中numpy基础学习及进行数组和矢量计算
Feb 12 #Python
python 数据清洗之数据合并、转换、过滤、排序
Feb 12 #Python
python3制作捧腹网段子页爬虫
Feb 12 #Python
python日志记录模块实例及改进
Feb 12 #Python
Windows下Python2与Python3两个版本共存的方法详解
Feb 12 #Python
使用Python绘制图表大全总结
Feb 11 #Python
Python 绘图和可视化详细介绍
Feb 11 #Python
You might like
实现了一个PHP5的getter/setter基类的代码
2007/02/25 PHP
PHP5.4中json_encode中文转码的变化小结
2013/01/30 PHP
重新认识php array_merge函数
2014/08/31 PHP
PHP list() 将数组中的值赋给变量的简单实例
2016/06/13 PHP
jquery ajax实现下拉框三级无刷新联动,且保存保持选中值状态
2013/10/29 Javascript
对table和ul实现js分页示例分享
2014/02/24 Javascript
javascript获取元素偏移量的方法有哪些
2014/06/24 Javascript
使用Meteor配合Node.js编写实时聊天应用的范例
2015/06/23 Javascript
vuejs2.0实现分页组件使用$emit进行事件监听数据传递的方法
2017/02/22 Javascript
js实现日期显示的一些操作(实例讲解)
2017/07/27 Javascript
node.js爬取中关村的在线电瓶车信息
2018/11/13 Javascript
js实现简单模态框实例
2018/11/16 Javascript
微信小程序学习笔记之获取位置信息操作图文详解
2019/03/29 Javascript
在Vue中使用this.$store或者是$route一直报错的解决
2019/11/08 Javascript
基于ts的动态接口数据配置的详解
2019/12/18 Javascript
Python 字符串定义
2009/09/25 Python
Python的组合模式与责任链模式编程示例
2016/02/02 Python
win10环境下python3.5安装步骤图文教程
2017/02/03 Python
关于Django外键赋值问题详解
2017/08/13 Python
Python实现的简单模板引擎功能示例
2017/09/02 Python
django 通过ajax完成邮箱用户注册、激活账号的方法
2018/04/17 Python
不归路系列:Python入门之旅-一定要注意缩进!!!(推荐)
2019/04/16 Python
Django框架文件上传与自定义图片上传路径、上传文件名操作分析
2019/05/10 Python
python构建指数平滑预测模型示例
2019/11/21 Python
Python字符串及文本模式方法详解
2020/09/10 Python
Django缓存Cache使用详解
2020/11/30 Python
Selenium+BeautifulSoup+json获取Script标签内的json数据
2020/12/07 Python
python使用numpy中的size()函数实例用法详解
2021/01/29 Python
CSS3中的Media Queries学习笔记
2016/05/23 HTML / CSS
英国顶级珠宝品牌之家:John Greed
2018/06/09 全球购物
医学类导师推荐信范文
2013/11/19 职场文书
市三好学生主要事迹
2014/01/28 职场文书
保险公司演讲稿
2014/09/02 职场文书
网络销售员岗位职责
2015/04/11 职场文书
二婚主持词
2015/06/30 职场文书
2016年学习雷锋精神广播稿
2015/12/17 职场文书