Pandas移除字符串http/https前缀不生效及报错问题排查
错误原因分析
- 第一种
lstrip方法错误:lstrip参数传入的是字符集合而非完整匹配字符串,只要字符串开头的字符在传入的'http://'字符集合内(包括h、t、p、:、/)都会被移除,所以会误删不带前缀的域名首字符。 - 第二种
Series.replace方法错误:该方法默认是全值匹配,只有整行内容完全等于http://才会被替换,同时参数格式错误,多值替换需传入字典{'http://':'', 'https://':''},且要指定regex=True才能做子串匹配。 - 第三种
str.replace方法错误:str.replace的入参要求是(pattern, repl, ...),你将两个参数打包为元组传入第一个位置,导致缺少第二个替换值参数,触发报错。 - 第四种
lsplit方法错误:不带http/https前缀的域名不存在//字符,拆分后只有1个元素,取索引为1的元素自然返回NaN。
正确解法
推荐使用正则匹配开头的前缀做替换,性能好且写法简洁:
full_list['domains'] = full_list['domains'].str.replace(r'^https?://', '', regex=True)
如果不想使用正则,可以用lambda做分支判断:
full_list['domains'] = full_list['domains'].apply(lambda x: x.split('//', 1)[1] if '//' in x else x)
内容的提问来源于stack exchange,提问作者NPD
相关产品推荐
相关产品推荐

