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

使用langdetect库检测Pandas DataFrame每行文本语言遇问题求助

解决langdetect识别Pandas列中英文文本的问题

先修正你的代码错误

你第一个写法df['body'].apply(lambda row: (detect == "en"))完全错误——你是把detect这个函数对象和字符串"en"做比较,不是调用函数检测文本内容,所以必然全返回False。正确逻辑是调用detect(row)后再判断是否等于"en"。

处理LangDetectException异常

报错LangDetectException: No features in text是因为部分行的文本是空字符串、仅含空白字符,或内容太简短/无有效语言特征,导致langdetect无法识别。解决办法是在处理函数中加入异常捕获,给这类情况设置默认标记(比如判定为非英文)。

最终可用代码

from langdetect import detect, LangDetectException
import pandas as pd

# 示例数据
df = pd.DataFrame({
    'stuff': [12, 25],
    'body': ["Je parle francais", "This is english"]
})

def is_english(text):
    try:
        # 先清理文本前后空白,避免空白字符串触发报错
        cleaned_text = text.strip()
        if not cleaned_text:  # 直接标记空文本为非英文
            return False
        return detect(cleaned_text) == 'en'
    except LangDetectException:
        # 无法识别语言时标记为非英文
        return False

# 批量生成是否为英文的标记列
df['is_english'] = df['body'].apply(is_english)

运行后输出结果:

stuffbodyis_english
12Je parle francaisFalse
25This is englishTrue

性能优化建议

apply本身比手动逐行for循环高效很多,若数据量极大,可借助swifter库让apply自动选择最优执行方式(矢量化或并行处理),安装后仅需修改最后一行:

import swifter
df['is_english'] = df['body'].swifter.apply(is_english)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 06:06:28