str.replace()可以一次处理一整个Series。str.replace()的正式形式为 Series.str.replace(pat, repl) ,其中pat为想要寻找的模式,一般为正则表达式,repl为要替换进去的字符串或函数。

下面是几个简单的例子,X代表一个Series,repl皆为字符串:

X.str.replace(r"iphone\s+7", "iphone7")  #为了将iphone7视为一个词,把iphone 7转换为iphone7,去除空格。
X.str.replace(r"16gbiphone", "16gb iphone")  #将16gbiphone转换无16gb iphone,增加空格。
X.str.replace(r"fl\s?\.?\s?oz", "floz")  #将fl.oz或fl . oz转换为floz

如果是一些比较复杂的情况,则需要将repl自定义为函数:

remove0 = lambda m:m.group(0).rstrip("0")
X.str.replace(r"\d\.\d*[1-9]+0+", remove0)

    本例中将repl定义为一个匿名函数,m.group(0)为匹配到的所有字符串,注意其不会匹配到1.000的情况,因为pat中存在[1-9]。

2) 将1.000kg变为1kg,这里因为要去除的.0两个字符位于中间,所以无法用上面的rstrip()

table1 = str.maketrans("","","0.")
remove1 = lambda m:m.group(0).translate(table1)
X.str.replace(r"\.0+[a-z]+", remove1)

    例中使用str.maketrans()方法指定想要删除的字符,再用translate()删除

3) 将0.0300kg转换为0.03kg。这里由于0.03本身存在0,所以不能用str.maketrans()了,因为会将所有0都删除。所以这里用两个正则表达式分别找到0.03和kg,再拼接起来:

def remove2(data):
    al1 = re.findall(r"\d+\.\d*[1-9]+0+",data.group(0))
    al2 = re.findall(r"[a-z]+",data.group(0))
    return al1[0].rstrip("0") + al2[0]

X.str.replace(r"\d+\.\d*[1-9]+0+[a-z]+", remove2)

def findcolon(data):
    al1 = re.findall(r'\d{1,2}\.\d{1,3}|\d{1,2}|1\d{2}', data.group(0)) 
    return al1[0]+" colon "

X.str.replace(r'(?:\d{1,2}\.\d{1,3}|\d{1,2}|1\d{2})(?:\s?\")', findcolon) # 匹配2.3“, 55", 132"等,转换为2.3 colon

 

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-11-23
  • 2022-02-16
猜你喜欢
  • 2022-02-12
  • 2022-12-23
  • 2021-11-30
  • 2021-05-17
  • 2021-11-06
  • 2021-12-28
  • 2021-06-02
相关资源
相似解决方案