将函数应用于 pandas df 时的异常处理

Exception handling when applying function to pandas df

我想使用 python 包 textblob 进行一些语言检测:我在 pandas df 中创建了一个新列,其中应包含检测到的语言:

from textblob import TextBlob
posts['Language']=posts['Caption'].apply(TextBlob.detect_language)

此代码有效。但是,对于一个 df,它会中断并抛出异常 ('TranslatorError'),其中相应的行包含少于 3 个字符。因此,我想编写一个函数来确保 'TextBlob.detect_language' 函数即使在发生异常时也能应用于完整的 df。

我想过类似的事情:

def get_language(r):
    try:
        return r.TextBlob.detect_language()
    # except (r.TextBlob.detect_language==TranslatorError):
        return np.nan # where textblob was not able to detect language -> nan

但是,我不知道在(已取消注释的)"except" 子句之后写什么。有帮助吗?

应用的当前函数(除注释外)

posts['Language']=posts['Caption'].apply(get_language)

returns

AttributeError: 'TextBlob' object has no attribute 'TextBlob'

如果我尝试

def get_language(r):
    try:
        return r.TextBlob.detect_language()
    except:
        pass # (or np.nan)

它只传递所有行,即不检测任何行的语言...

感谢大家的帮助!

见下文:

from textblob import TextBlob
import pandas

def detect_language(text):
    try:
        b = TextBlob(text)
        return b.detect_language()
    except:
        return "Language Not Detected"

df = pandas.DataFrame(data=[("na","hello"),("na", "bonjour"),("na", "_")], columns = ['Language', 'Caption']) 
df['Language']=df['Caption'].apply(detect_language)
df