有时会碰到小伙伴们提问了一些有趣的问题,在此向大家分享其中一个数据清洗的例子:
某位小伙伴问到,某个Pandas数据框中的某一列,比如df['Price']这一列,该列中的每一行的值,有些是带有千分位符号(逗号)的数字字符串,比如'2,399','3,699,799'等,有些是无"千分位符"的值,比如'999'等,这些值都必须转换为int或float,才能做各种数学或聚合运算,那么,假设现在要去掉千分位(逗号),拼接,转换类型等一气呵成的操作,要如何实现呢?
解决思路和逻辑实现其实都很简单,可以自定义一个函数convert(),先判断类型,再判断"不带逗号"或"带逗号",带逗号就利用字符串中的split()方法,以逗号做为分隔符,返回list后循环处理,再附加到1个字符串,最后返回的是用来表示金额的浮点数类型,废话我就不说了,直接上代码,假设数据框df(模拟读取csv文件后所返回的df)和数据是这样子的:
然后搭配Pandas中特别好用的map()方法或apply()方法,并将函数convert做为参数传入,直接批次或“向量”处理了:
PS:
大家要特别注意apply()/applymap()/map()它们之间的异同与用法,这里使用的是Series对象的map()方法
最后看下数据类型,也是期待中的结果,即数值型的数据类型,是不是很简单啊!
如何在Pandas数据框中,将带有"千分位"(如1,299)的金额数据,批次转换为正确的数据类型?
网友评论