这个本来是写好的,但是今天在用的时候却发现了问题,重新改写了,所以记录一下。
问题
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_short的数据,发现还有一些和这个情况类似,后面额外带一个两个字母的,那是因为有一些sku原本后面并不是纯数字,有少数的带了一两个字母。所以之前的清洗思路就不对了。
思路
# sku缩写
if '-' in sku:
sku_short = 'other'
else:
sku_short = re.split(r'\d+', sku)[0]
新的思路就是用正则的分割方法,将数字作为分割符进行分割形成列表,取列表第一个元素。
例如:
字符串'sweatshirt170804704a'就会分割成列表['sweatshirt','a']。然后取列表第一个元素即可。
总结
要根据不同的情况采用不同的方法,是替换数字?还是提取开头字母?
当然,最后要进行检查才行。
网友评论