如何在pandas条件语句中用str.contains()为列元素按需应用函数并解决报错
问题原因
你遇到的报错核心是.str.contains()是Pandas Series的矢量化方法,而apply传入lambda的参数x是URL列中的单个字符串对象,字符串本身没有str属性,因此触发属性错误。
修复方案
方案1:直接修正原有逻辑
将字符串包含判断替换为Python原生的in运算符即可,完整代码如下:
from urllib.parse import urlparse df['URL'] = df['URL'].apply( lambda x: urlparse(x).netloc if 'http' in x else x )
方案2:更通用的鲁棒写法
可以省略是否包含http的判断,直接利用Python的短路运算逻辑:如果urlparse(x).netloc为空(即原URL没有http前缀),就直接返回原始值,代码更简洁,也能兼容大小写、特殊前缀等边缘情况:
from urllib.parse import urlparse df['URL'] = df['URL'].apply(lambda x: urlparse(x).netloc or x)
处理结果示例
运行上述代码后,你的样例数据输出如下:
ID URL 0 1 www.Facebook.com 1 2 Twitter.com 2 3 www.Youtube.com 3 4 www.Microsoft.com 4 5 www.Stackovervlow.com
内容的提问来源于stack exchange,提问作者josetribiani
相关产品推荐
相关产品推荐

