将函数应用于Dataframe列时处理空值

2024-05-23 15:15:29 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图使用spaCy库在数据框列中对城市(或非城市)进行分类。我的数据框架如下:

    City Match eLocations Match Country Match Region Match CountryCity Match  Null Count  Null Percent
0  Los Angeles       Long Beach    Long Beach   Long Beach       Los Angeles           0           0.0
2       Santos           Santos        Santos       Santos            Santos           0           0.0
5          NaN          Stewart       Stewart      Stewart               NaN           2          40.0
7          NaN           Meling        Meling       Meling               NaN           2          40.0

我正在尝试根据库提供给我的类型创建一个名为“Spacy Type”的附加列。我的初始函数如下所示:

def setSpace(cellValue):
    doc1 = nlp(cellValue)
    for ent in doc1.ents:
        print(ent.text, ent.start_char, ent.end_char, ent.label_)
        return ent.label_


matchCols['Spacey type'] = matchCols['City Match'].apply(setSpace)

#### OUTOUT:

(Los Angeles,)
Los Angeles 0 11 GPE
()

Traceback (most recent call last):
...
TypeError: object of type 'float' has no len()

其中nlp是spacy的处理器,它将某物分类为城市、公司、个人等。然而,运行它,我不断得到TypeError: object of type 'float' has no len(),这是有意义的,因为其中两行包含空值。如何处理这些空值?以我的生命来说,我无法回避这个错误。我还尝试了其他几种方法:

def setSpace(cellValue):
    doc1 = nlp(cellValue)
    print(doc1.ents)
    gen = (ent for ent in doc1.ents if len(ent) > 0)
    for ent in gen:
        print(ent.text, ent.start_char, ent.end_char, ent.label_)
        return ent.label_


matchCols['Spacey type'] = matchCols['City Match'].apply(setSpace)

##### AND ....


def setSpace(cellValue):
    if cellValue is "nan":
        return 0
    doc1 = nlp(cellValue)
    print(doc1.ents)
    for ent in doc1.ents:
        print(ent.text, ent.start_char, ent.end_char, ent.label_)
        return ent.label_

matchCols['Spacey type'] = matchCols['City Match'].apply(setSpace)

如果列为null,如何应用my函数从spacy检索类型或返回0?它顺利通过洛杉矶,但在那之后被绊倒了,因为桑托斯没有从斯帕西返回任何东西(它应该返回),然后NaN值被传递

多谢各位


Tags: citytypematchdoc1nanlabelprintchar