Обрабатывать нулевые значения при применении функций к столбцу данных - PullRequest
0 голосов
/ 04 марта 2020

Я пытаюсь использовать библиотеку 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

Я пытаюсь создать дополнительный столбец под названием «Пространственный тип» на основе типа, предоставленного мне библиотекой. Моя начальная функция выглядит следующим образом:

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 - процессор из пространства, который классифицирует что-то как город, компанию, человека и т. Д. c. Однако, выполняя это, я продолжаю получать TypeError: object of type 'float' has no len(), что имеет смысл, потому что 2 строки содержат нулевые значения. Как я могу обработать эти нулевые значения? Я не могу, на всю жизнь, обойти эту ошибку. Я также попробовал несколько других способов:

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 ИЛИ вернуть 0, если столбец пуст? Он проходит через Лос-Анджелес нормально, но после этого срабатывает, так как Santos ничего не возвращает из spacy (как и должно быть), а затем передаются значения NaN.

Спасибо

1 Ответ

1 голос
/ 04 марта 2020

Вы можете использовать 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
...