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