我正在尝试使用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值。
谢谢
答案 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