Pandas如何删除DataFrame列内列表中http/https开头的元素
问题根源
你的代码出问题有两个核心原因:
url_all列存储的是字符串格式的列表,而非原生Python列表对象。直接对字符串做遍历会逐字符拆分,这就是你看到输出全是零散括号、字母的原因。str.startswith()原生方法不支持正则的|或逻辑,你写的"'http|'https"会被当成完整字符串匹配,还额外多写了不存在的前置单引号,匹配逻辑完全错误。
正确实现代码
首先如果列是字符串形式的列表,先做格式转换,再执行过滤:
from ast import literal_eval # 第一步:将字符串形式的列表转为Python原生列表(如果列本身已经是列表可跳过这步) df['url_all'] = df['url_all'].apply(literal_eval) # 第二步:过滤以http/https开头的元素,startswith支持传入元组匹配多个前缀 df['url_all'] = df['url_all'].apply( lambda url_list: [url for url in url_list if not url.startswith(('http', 'https'))] )
执行后即可得到预期输出:
index url_all 0 0 [] 1 1 ['facebook.com'] 2 2 [] 3 3 [] 4 4 ['twitter.com/c']
补充:如果遍历列中元素时得到单个字符,就说明列值是字符串而非真实列表,必须先做格式解析再过滤。
内容的提问来源于stack exchange,提问作者B.Le
相关产品推荐
相关产品推荐

