Pandas: 使用str.replace() 进行文本清洗
str.replace()可以一次处理一整个Series。str.replace()的正式形式为 Series.str.replace(pat, repl) ,其中pat为想要寻找的模式,一般为正则表达式,repl为要替换进去的字符串或函数。
下面是几个简单的例子,X代表一个Series,repl皆为字符串:
X.str.replace(r"iphone\s+7", "iphone7") #为了将iphone7视为一个词,把iphone 7转换为iphone7,去除空格。
X.str.replace(r"16gbiphone", "16gb iphone") #将16gbiphone转换无16gb iphone,增加空格。
X.str.replace(r"fl\s?\.?\s?oz", "floz") #将fl.oz或fl . oz转换为floz
如果是一些比较复杂的情况,则需要将repl自定义为函数:
1) 将1.101000变为1.101,即将后面的"0"去掉。
remove0 = lambda m:m.group(0).rstrip("")
X.str.replace(r"\d\.\d*[1-9]+0+", remove0)
本例中将repl定义为一个匿名函数,m.group(0)为匹配到的所有字符串,注意其不会匹配到1.000的情况,因为pat中存在[1-9]。
2) 将1.000kg变为1kg,这里因为要去除的.和0两个字符位于中间,所以无法用上面的rstrip()。
table1 = str.maketrans("","","0.")
remove1 = lambda m:m.group(0).translate(table1)
X.str.replace(r"\.0+[a-z]+", remove1)
例中使用str.maketrans()方法指定想要删除的字符,再用translate()删除
3) 将0.0300kg转换为0.03kg。这里由于0.03本身存在0,所以不能用str.maketrans()了,因为会将所有0都删除。所以这里用两个正则表达式分别找到0.03和kg,再拼接起来:
def remove2(data):
al1 = re.findall(r"\d+\.\d*[1-9]+0+",data.group(0))
al2 = re.findall(r"[a-z]+",data.group(0))
return al1[0].rstrip("") + al2[0] X.str.replace(r"\d+\.\d*[1-9]+0+[a-z]+", remove2)
4) 商品中有很多衣服鞋子之类的,一般都标有尺码,比如3",15”等。这里要把后面的尺码符号‘ ” ’提取出来并用“colon”表示,让模型识别出前面的数字3和15是代表尺码大小。
def findcolon(data):
al1 = re.findall(r'\d{1,2}\.\d{1,3}|\d{1,2}|1\d{2}', data.group(0))
return al1[0]+" colon " X.str.replace(r'(?:\d{1,2}\.\d{1,3}|\d{1,2}|1\d{2})(?:\s?\")', findcolon) # 匹配2.3“, 55", 132"等,转换为2.3 colon
Pandas: 使用str.replace() 进行文本清洗的更多相关文章
- 使用Pandas: str.replace() 进行文本清洗
前段时间参加了Kaggle上的Mercari Price Suggestion Challenge比赛,收获良多,过些时候准备进行一些全面的总结,本篇文章先谈一个比赛中用到的小技巧. 这个比赛数据中有 ...
- Pandas系列(四)-文本数据处理
内容目录 1. 为什么要用str属性 2. 替换和分割 3. 提取子串 3.1 提取第一个匹配的子串 3.2 匹配所有子串 3.3 测试是否包含子串 3.4 生成哑变量 3.5 方法摘要 一.为什么要 ...
- str.replace()和re.sub()/calendar.month_abbr/re.subn()/upper和lower和capitalize/贪婪匹配和费贪婪匹配/re.S和re.DOTALL 笔记
str.replace()可以进行简单的替换 >>> a = 'one.txt, index.py, index.php, index.html, index.js' >> ...
- Uncaught TypeError: str.replace is not a function
在做审核页面时,点击审核通过按钮不执行 后来F12控制台查看发现有报错 是因为flisnullandxyzero未执行 然后找出这个方法,此方法为公共方法,将这个方法复制出来 然后使用console. ...
- str.replace替换变量名的字符串
网易云课堂该课程链接地址 https://study.163.com/course/courseMain.htm?share=2&shareId=400000000398149&cou ...
- replace限制文本框只能输入数字,数字和字母等的正则表达式
1.文本框只能输入数字代码(小数点也不能输入) <input onkeyup="this.value=this.value.replace(/\D/g,'')" onafte ...
- SQL用replace替换文本部分内容
替换文本内容 update tk_question set stem=replace(cast(stem as varchar(max)) ,'被替换文本','替换文本') 查询字段内容长度 sele ...
- 【pandas】pandas.Series.str.split()---字符串分割
原创博文,转载请注明出处! 本文代码的github地址 series中的元素均为字符串时,通过str.split可将字符串按指定的分隔符拆分成若干列的形式. 例子: 拆分以逗号为分隔符的字 ...
- pandas格式化str为时间,pandas将int转化为str
code_300['HISTORY_DATE'] = code_300['HISTORY_DATE'].map(str)code_300['HISTORY_DATE'] = pd.to_datetim ...
随机推荐
- Multi-Projector Based Display Code ------- Home
Overview This project provides you with the tools and techniques you need to create your own large-a ...
- Cmake用法
目录 1,Cmake introduce 1.1 常用的目录结构 2,CMakeLists.txt文件的写法 Cmake 常用命令 Scripting Commands set include Pro ...
- 2018-2019-2 20165317《网络对抗技术》Exp1 PC平台逆向破解
2018-2019-2 20165317<网络对抗技术>Exp1 PC平台逆向破解 实验目的 掌握NOP, JNE, JE, JMP, CMP汇编指令的机器码 NOP:无作用,英文&quo ...
- 多线程之Synchronized锁的基本介绍
基本介绍 synchronized是Java实现同步的一种机制,它属于Java中关键字,是一种jvm级别的锁.synchronized锁的创建和释放是此关键字控制的代码的开始和结束位置,锁是有jvm控 ...
- Spark架构原理
- oracle 表空间,用户的创建及授权,表空间基本操作
参考地址:https://www.cnblogs.com/zhaideyou/articles/5845271.html Oracle安装完后,其中有一个缺省的数据库,除了这个缺省的数据库外,我们还可 ...
- 报错处理——# Creating Server TCP listening socket *:6379: bind: Address already in use
在启动redis时报错 # Creating Server TCP listening socket *:6379: bind: Address already in use 错误原因 6379地址已 ...
- 一次完整的http请求过程
转载:https://blog.51cto.com/linux5588/1351007 当我们在浏览器的地址栏输入 www.linux178.com,然后回车,回车这一瞬间到看到页面到底发生了什么呢? ...
- Flask的Windows部署:mod_wsgi + Apache
参考1:https://blog.csdn.net/mist99/article/details/80771289 参考2:https://blog.csdn.net/firefox1/article ...
- python之进程,线程,协程简单理解
进程:资源单位,由操作系统控制调度.正在执行的一个程序或者过程,进程之间不共享资源,进程间通讯手段:管道,队列,信号量等.多用于计算密集型场景,如金融计算 线程:是cpu的最小执行单位,由操作系统控制 ...