排除熊猫中的非英文行



我想从某一列中的字符串值不是用英语写的数据帧中删除所有行。示例:我在数据框中有一个名为"text"的列,当在该字段上使用langdetect时,我想删除所有不返回"en"的行。(langdetect使用函数.detect(text(,如果文本是用英语写的,则返回"en"(。

我对python/pandas还比较陌生,在过去的两天里,我一直在试图弄清楚loc和lambda函数是如何工作的,但我找不到解决问题的方法。我尝试了以下功能:

languageDetect = ld.detect(df.text.str) 
df.loc[languageDetect, "text"] = 'en'

不同的方法是,我尝试将ld.detect(text(函数应用于该行,并将其保存为新的数据帧,但没有成功。

df['new'] = df['text'].apply(lambda x: ld.detect(x))

我处理的是巨大的文件(有时超过数百万行(,所以用"for"迭代行并不是解决我问题的可行方案。尽管我确实尝试过,但它确实奏效了,但我找不到一种方法来创建一个带有值的新数据帧。

for index, row in df.iterrows():
if row['text']:
try:
if "en" in ld.detect(row['text']):
print(index, row['text'])
except:
pass

有人能帮我吗?我想创建一个新的数据帧,其中包含langdetect.dedetect(textColumn(=='en'时返回"en"的所有行。这可能吗?谢谢

如果您想用false替换错误,只需执行以下操作:

def is_en(txt):
try:
return ld.detect(x)=='en'
except:
return false
df = df[df['text'].apply(is_en)]

最新更新