/ 数据需求/ 需求拆解/ 需求处理
方法一方法二 / 总结
最近发现周围的很多小伙伴们都不太乐意使用pandas,转而投向其他的数据操作库,身为一个数据工作者,基本上是张口pandas,闭口pandas了,故而写下此系列以让更多的小伙伴们爱上pandas。
系列文章说明:
系列名(系列文章序号)——此次系列文章具体解决的需求
平台:
windows 10python 3.8pandas >=1.2.4 / 数据需求
数据结构如下(price列不含nan及其他不规范类型的字符串),将price列的美元符号$和,去除掉并转换成浮点类型。
/ 需求拆解看到这种数据清洗需求,内心应该是有很多种方法去解决的,这里着重提下在pandas里几种常用手段。
/ 需求处理 方法一在使用pandas前,先温习下用python自带函数及re模块处理此类需求,简要地使用两种方式。
使用两个string.replace方法
# 使用两个string.replace方法data['price'] = [float(i.replace('$', '').replace(',', '')) for i in data['price']]
使用re模块
# reimport redata['price'] = [float(re.sub(r'[$,]', '', i)) for i in data['price']]
结果同上,不再贴图展示。
(手动水印:原创CSDN宿者朽命,https://blog.csdn.net/weixin_46281427?spm=1011.2124.3001.5343,公众号A11Dot派)
方法一是没有用到任何pandas函数及方法,使用在pandas里使用列表生成式赋值给pd.Dataframe()总感觉差了点什么,哦,是.map方法:
map调用函数
.replace.replace
# 使用map,可以链式调用其他pandas方法,如astypedata['price'].map(lambda x: x.replace('$', '').replace(',', '')).astype(float)
re
# 也可以在map里调用re模块data['price'].map(lambda x: re.sub(r'[$,]', '', x)).astype(float)
使用split函数切分字符串
既然知道$在最前面,且只使用,做千分位,可以尝试split结合strip函数进行字符串拆分,再join拆分后列表的字符串。
# join拆分后的字符串完成数据清洗data['price'].map(lambda x: ''.join(x.lstrip('$').split(','))).astype(float)
str.split代替split
细看price列是一个dtype = 'object’类别的列,这样也能使用pandas中的.str.split方法。
# .str.strip.str.split代替strip.splitdata['price'].str.strip('$').str.split(',').map(lambda x: ''.join(x)).astype(float)
str.replace
前面水了这么多该请出这次的主角了。前面写的多多少少有点繁琐,或者没pandas那味了,本来想用pandas简化代码或者更好理解,这倒好更麻烦了,使用.str.replace就会舒服不少。
# .str.replace, 使用正则表达式,需要加上regex=Truedata['price'].str.replace(r'[$,]', '', regex=True).astype(float)
/ 总结数据的处理或许理解方式不同处理的过程不同,不用去为了做到而去更改自己的代码习惯,或者是自己的逻辑习惯,这里罗列了部分解决方法,看起来都是比较容易理解的,只是对于pandas模块有了专属的方法替代,本篇虽短,仅仅提及了解决本次需求可以用到的几种,希望能对正在处理这类数据的你带来一点帮助。
春雪夜入白草地,只影闲游孤鸟随。
于二零二二年二月十二日作