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

时间:2020-03-04 16:27:15

标签: python pandas dataframe spacy

我正在尝试使用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(),这是有道理的,因为其中两行包含null价值观。我该如何处理这些空值?我一生无法克服这个错误。我也尝试了其他几种方法:

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)

如何应用我的函数从spacy检索类型,或者如果列为null则返回0?它通过了洛杉矶罚款,但之后就被绊倒了,因为桑托斯(Santos)从spacy中什么也没有返回(应该如此),然后传递了NaN值。

谢谢

1 个答案:

答案 0 :(得分:1)

您可以使用pd.isnull来检查单个单元格的值是否为空。 (文档:https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.isnull.html

>>> import pandas as pd
>>> pd.isna('dog')
False

>>> pd.isna(pd.NA)
True
相关问题