【问题标题】:Determining what language a string contains in a pandas DataFrame确定一个字符串在 pandas DataFrame 中包含什么语言
【发布时间】:2025-12-03 23:10:01
【问题描述】:

我是 Pandas 和 Python 的新手。

我的数据框:

df

Text
Best tv in 2020
utilizar un servicio sms gratuito
utiliser un tv pour netflix

我想要的输出

Text                                    Language
Best tv in 2020                         en
utilizar un servicio sms gratuito       es
utiliser un tv pour netflix             fr

我正在使用什么:

from textblob import TextBlob

b = TextBlob("utilizar un servicio sms gratuito")
print(b.detect_language())

>>es

我不确定如何集成此方法来填充我的 Pandas 数据框。

我试过了:

df['Language'] = TextBlob(df['Text']).detect_language()

但我收到一个错误:

TypeError: The `text` argument passed to `__init__(text)` must be a string, not <class 'pandas.core.series.Series'>

我明白这意味着什么,我需要传递一个字符串而不是 pandas DataFrame 系列,所以我的问题是如何循环整个系列以检测 text 列中每行的语言?

感谢您的建议。

【问题讨论】:

    标签: python pandas textblob


    【解决方案1】:

    Series.apply 与 lambda 函数一起使用:

    df['Language'] = df['Text'].apply(lambda x: TextBlob(x).detect_language())
    

    Series.map:

    df['Language'] = df['Text'].map(lambda x: TextBlob(x).detect_language())
    

    print (df)
                                    Text Language
    0                    Best tv in 2020       en
    1  utilizar un servicio sms gratuito       es
    2        utiliser un tv pour netflix       fr
    

    【讨论】:

    • 嗨@jezrael,一如既往地感谢你。关于这两种解决方案之间的性能差异的任何 cmets?
    • @JonasPalačionis - 第一个更常见于传递函数,但不适用于索引值,第二个用于df.index.map,也适用于答案中的列。
    • 明白,谢谢。不确定您之前是否使用过 textblob,但现在我收到了 urllib.error.HTTPError: HTTP Error 429: Too Many Requests,有什么解决方法的想法吗?
    • @JonasPalačionis - 我第一次使用它,但我想有一些保护可以避免许多请求......
    最近更新 更多