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

如何在Python DataFrame中提取链接域名?解决TypeError报错

解决提取域名时的TypeError问题

问题根源

你用df[['Источник 1']]得到的是DataFrame对象,直接调用apply(get_domain)时,函数会接收整列数据而非单个URL字符串,这就触发了expected string or bytes-like object错误。另外,列里如果存在非字符串值(比如NaN、空值),也会引发同样的报错。

修复方案

  1. 把单列数据转为Series:用df['Источник 1'](单括号)替代df[['Источник 1']],这样apply会逐个处理每个URL元素。
  2. 在get_domain函数里先做类型校验,过滤非字符串/空值,避免无效输入报错。

修正后的代码

import re
from tldextract import extract   # pip install tldextract

# 单括号获取Series,而非双括号生成的DataFrame
df25 = df['Источник 1']

def get_domain(url):
    # 先处理非字符串、空值的情况
    if not isinstance(url, str) or url.strip() == "":
        return None  # 也可以返回空字符串等你需要的默认值
    subdomain, domain, suffix = extract(url)
    ignored = ["www", "web"]
    if not subdomain or subdomain.lower() in ignored:
        return f"{domain}.{suffix}"  # 补全后缀,返回完整域名(原代码只返回domain会丢失后缀)
    pat = r"^(?:{})\.".format("|".join(ignored))
    cleaned_subdomain = re.sub(pat, "", subdomain)
    return f"{cleaned_subdomain}.{domain}.{suffix}"

# 对Series调用apply逐个处理元素
df25 = df25.apply(get_domain)

额外提示

如果需要把提取后的域名放回原DataFrame,直接赋值即可:df['提取的域名'] = df25.apply(get_domain)

内容的提问来源于stack exchange,提问作者politolog197

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 12:21:12