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字符串连接方式汇总
Aug 21 Python
Python中的ConfigParser模块使用详解
May 04 Python
11月编程语言排行榜 Python逆袭C#上升到第4
Nov 15 Python
Python字典操作详细介绍及字典内建方法分享
Jan 04 Python
Django添加sitemap的方法示例
Aug 06 Python
Python3实现爬虫爬取赶集网列表功能【基于request和BeautifulSoup模块】
Dec 05 Python
python+pyqt5实现KFC点餐收银系统
Jan 24 Python
python实现邮件自动发送
Aug 10 Python
如何在Django中使用聚合的实现示例
Mar 23 Python
使用Keras中的ImageDataGenerator进行批次读图方式
Jun 17 Python
爬虫代理的cookie如何生成运行
Sep 22 Python
Scrapy 配置动态代理IP的实现
Sep 28 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
PHP set_error_handler()函数使用详解(示例)
2013/11/12 PHP
php设计模式之简单工厂模式详解
2014/09/04 PHP
PHP实现二叉树的深度优先与广度优先遍历方法
2015/09/28 PHP
老生常谈PHP面向对象之命令模式(必看篇)
2017/05/24 PHP
PHP迭代器和生成器用法实例分析
2019/09/28 PHP
jquery 新手学习常见问题解决方法
2010/04/18 Javascript
javascript 面向对象 function类
2010/05/13 Javascript
js和as的稳定传值问题解决
2013/07/14 Javascript
JS模拟Dialog弹出浮动框效果代码
2015/10/16 Javascript
Javascript自执行匿名函数(function() { })()的原理浅析
2016/05/15 Javascript
Nodejs 发送Post请求功能(发短信验证码例子)
2017/02/09 NodeJs
vue中的非父子间的通讯问题简单的实例代码
2017/07/19 Javascript
vue中进入详情页记住滚动位置的方法(keep-alive)
2018/09/21 Javascript
开发用到的js封装方法(20种)
2018/10/12 Javascript
解决Mint-ui 框架Popup和Datetime Picker组件滚动穿透的问题
2020/11/04 Javascript
Pycharm学习教程(3) 代码运行调试
2017/05/03 Python
Django之创建引擎索引报错及解决详解
2019/07/17 Python
利用python实现.dcm格式图像转为.jpg格式
2020/01/13 Python
pycharm的python_stubs问题
2020/04/08 Python
Python用5行代码实现批量抠图的示例代码
2020/04/14 Python
HTML里显示pdf、word、xls、ppt的方法示例
2020/04/14 HTML / CSS
英国花园、DIY、电器和家居用品商店:Robert Dyas
2019/03/18 全球购物
运动鞋、足球鞋和慕尼黑球衣:Sport Münzinger
2019/08/26 全球购物
大学生实习感言
2014/01/16 职场文书
预备党员政审材料
2014/02/04 职场文书
基层干部2014全国两会学习心得体会
2014/03/10 职场文书
公司领导班子四风对照检查材料
2014/09/27 职场文书
优秀班主任先进事迹材料
2014/12/16 职场文书
2014年学生党支部工作总结
2014/12/20 职场文书
师德师风事迹材料
2014/12/20 职场文书
八年级上册语文教学计划
2015/01/22 职场文书
2015年七夕情人节感言
2015/08/03 职场文书
信息技术研修心得体会
2016/01/08 职场文书
Nginx反向代理学习实例教程
2021/10/24 Servers
 python中的元类metaclass详情
2022/05/30 Python
python数字图像处理之对比度与亮度调整示例
2022/06/28 Python