使用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)
运行后输出结果:
| stuff | body | is_english |
|---|---|---|
| 12 | Je parle francais | False |
| 25 | This is english | True |
性能优化建议
apply本身比手动逐行for循环高效很多,若数据量极大,可借助swifter库让apply自动选择最优执行方式(矢量化或并行处理),安装后仅需修改最后一行:
import swifter df['is_english'] = df['body'].swifter.apply(is_english)
内容的提问来源于stack exchange,提问作者jr123456jr987654321
相关产品推荐
相关产品推荐

