Python-正则清洗数据

这个本来是写好的,但是今天在用的时候却发现了问题,重新改写了,所以记录一下。

问题

sku代表商品编号,一款商品代表一个sku。
当时大致的浏览了下,发现主要分为两类
如:


sku

当时问了下老大后基本思路就出来了。
第一类的提取前面的字母,第二类暂时归为'other'

然后用正则写了

# sku缩写
if '-' in sku:
    sku_short = 'other'
else:
    sku_short = re.sub(r'\d', '', sku)

思路是很简单的,就是用正则的替换功能,把数字全部替换成空格。

因为这个暂时用不上,大致浏览了下发现提取成功后就过去了。
但是今天想计算不同种类的权重时,发现一个问题,sku_short竟然出现了sweatshirta这样的奇怪的数据。查了下sku_short中有sweatshirt,后来去数据中查询,找到原因了


特别点的sku

再仔细检查了sku_short的数据,发现还有一些和这个情况类似,后面额外带一个两个字母的,那是因为有一些sku原本后面并不是纯数字,有少数的带了一两个字母。所以之前的清洗思路就不对了。

思路

    # sku缩写
    if '-' in sku:
        sku_short = 'other'
    else:
        sku_short = re.split(r'\d+', sku)[0]

新的思路就是用正则的分割方法,将数字作为分割符进行分割形成列表,取列表第一个元素。

例如:
字符串'sweatshirt170804704a'就会分割成列表['sweatshirt','a']。然后取列表第一个元素即可。

总结

要根据不同的情况采用不同的方法,是替换数字?还是提取开头字母?
当然,最后要进行检查才行。

你可能感兴趣的:(Python-正则清洗数据)