Pandas如何删除DataFrame中非英文内容的行
代码修正方案
原代码问题根源
- 原代码中
str(df['review'])是将整个review列的Series对象整体转为字符串,仅会触发1次语言检测,结果直接赋值给所有行的detect列,才会出现所有行都被标记为英文的错误 - 循环删除阶段传入
df.drop()的参数是检测得到的语言编码,不是待删除行的索引,完全无法匹配到要删除的行,且遍历过程中修改原DataFrame极易引发索引错乱
修正后可直接运行的代码
import pandas as pd from langdetect import detect, LangDetectException # 样例数据构造,你可以替换成自己的df读取逻辑 data = {"review": ["de la nada mi ya no se escucha", "I tried to set it up", "It is a good product"]} df = pd.DataFrame(data) # 定义单行语言检测函数,加异常处理避免无意义文本引发报错 def detect_lang(text): try: return detect(text) except LangDetectException: return "other" # 对每行review单独执行语言检测 df["detect"] = df["review"].apply(detect_lang) # 直接用布尔索引筛选保留英文行,无需循环删除 df_en = df[df["detect"] == "en"].copy()
运行后df_en就是仅保留英文内容的DataFrame,你可以根据需求选择是否删除中间生成的detect列。
内容的提问来源于stack exchange,提问作者SaNa
相关产品推荐
相关产品推荐

