Python 具有匹配nan值的模糊匹配问题
我有一个名为Python 具有匹配nan值的模糊匹配问题,python,pandas,Python,Pandas,我有一个名为RawDatabase的数据框,我正在将值捕捉到名为ValidationLists的验证列表中。我从RawDatabase中获取一个特定列,并将元素与验证列表进行比较。条目将被捕捉到它最相似的验证列表中的条目。代码如下所示: def GetStandardisedField(rawDatabase,validationLists,field): print('Standardising ', field,' ...') my_list = validationLists[field
RawDatabase
的数据框,我正在将值捕捉到名为ValidationLists
的验证列表中。我从RawDatabase中获取一个特定列,并将元素与验证列表进行比较。条目将被捕捉到它最相似的验证列表中的条目。代码如下所示:
def GetStandardisedField(rawDatabase,validationLists,field):
print('Standardising ', field,' ...')
my_list = validationLists[field]
l1=[]
for x in rawDatabase[field]:
choice = process.extractOne(x, my_list)[0]
l1.append(choice)
rawDatabase['choice']=l1
rawDatabase[field] = rawDatabase['choice']
del rawDatabase['choice']
return rawDatabase
在一个示例中,RAWDABASE[字段]如下所示:
0 yes
1 YES123
2 nO023
3 n
4 NaN
YES
NO
0 YES
1 YES
2 NO
3 NO
4
validationList如下所示:
0 yes
1 YES123
2 nO023
3 n
4 NaN
YES
NO
0 YES
1 YES
2 NO
3 NO
4
我正在尝试捕捉所有值,以便新的RAWDABASE[field]看起来像:
0 yes
1 YES123
2 nO023
3 n
4 NaN
YES
NO
0 YES
1 YES
2 NO
3 NO
4
但是,当我尝试将NaN
值捕捉到validationList
时,我似乎遇到了问题(即使我在validationList
中包含NaN
(作为测试)
有人能告诉我处理NaN值的最佳方法吗(因此快照数据集中的NaN值为空)
谢谢我喜欢python的这类东西
您可以使用get\u close\u matches
from difflib import get_close_matches
foo = pd.Series(('yes', 'YES123', 'nO023', 'nO023', 'n', np.nan))
validation_list = ['YES', 'NO']
def get_matches(x):
if pd.isnull(x):
return np.nan
else:
return get_close_matches(str(x).upper(), validation_list, 1, 0.2)[0]
foo.apply(get_matches)
0 YES
1 YES
2 NO
3 NO
4 NaN
get\u close\u matches
获取要测试的值、要测试的列表、要返回的匹配数以及要返回匹配所需的相似程度的阈值。返回类型是一个列表,因此只需获取该列表中的第0项即可
from fuzzywuzzy import process
l=['YES',"NO"]
a=[]
for x in df.Col1:
try:
a.append([process.extract(x, l, limit=1)][0][0][0])
except:
a.append(np.nan)
df['target']=a
df
Out[1261]:
Col1 target
0 yes YES
1 YES123 YES
2 nO023 NO
3 n NO
4 NaN NaN