You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 05:33:18