问题的起因是,处理书目数据时,图书价格列均为CNY526.23(全6册),为统计价格,只想保留数字,将查找资料获得的思路记录如下:
1、考虑可以分两步,先去掉CNY,再去掉括号内容。于是查找资料,可以采用代码:data['定价'].map(lambda x: str(x)[3:]),成功去掉CNY。但是括号内容还在。
2、为了去掉括号内容,考虑使用正则表达式,或字符串切片,水平有限,查找了很多资料没有成功。突然觉得思路可以开阔一下,把数字提取出来,或者把其他字符删掉。
代码如下:
price = data['定价']
temp = price.str.extract('(\d+).*?(\d+).*?')#取整数和小数点后面两个部分
new_price = temp[0] + "." + temp[1]#字符串拼接
3、最简单的方法还是正则表达式,之前没有成功原来是方法不对。
data['定价'] = data['定价'].str.extract('(\d+[\.]*\d*)'),其实2中的方法和3就差一点,2只提取数字,分成两部分之后拼接,3就一步完成了
4、同理使用正则,提取分类号
有的数据分类号比较混乱,如这样 ①G886.9-64,或者这样 ① I222-49 ② K825.我只想保留第一个分类号,并且去掉圆圈1。
使用正则进行提取:
data['CIP分类'] = data['CIP分类'].str.extract('([A-Z]+\d*[-\.]*\d*[-\.]*\d*)')
正则表达式确实好用。
网友评论