使用FuzzyWuzzy与Pandas处理字符串匹配时遇TypeError求助
问题原因及解决方法
这个错误的核心原因是全量数据集里存在缺失值(NaN)——Pandas中NaN的类型是float,而fuzzywuzzy的匹配函数需要处理字符串类型,当传入float类型的NaN时,函数内部调用len()方法时就会触发TypeError。测试数据集没有缺失值,所以运行正常。
解决步骤
1. 在clean函数中添加类型校验
修改你的clean函数,提前过滤缺失值和非字符串类型:
from fuzzywuzzy import process import pandas as pd def clean_string(s, ref_list, threshold=80): # 处理缺失值或非字符串输入 if pd.isna(s) or not isinstance(s, str): return s # 也可以返回空字符串或其他默认值,根据需求调整 # 正常匹配逻辑 match_result = process.extractOne(s, ref_list) return match_result[0] if match_result[1] >= threshold else s
2. 预处理数据集(可选)
如果不想修改函数,也可以先对目标Series做预处理,统一转成字符串并处理缺失值:
# 将所有值转为字符串,把NaN替换为空字符串 df['your_column'] = df['your_column'].astype(str).replace('nan', '', regex=False) # 再应用clean函数 df['cleaned_column'] = df['your_column'].apply(clean_string, ref_list=your_reference_list)
3. 验证缺失值
可以先执行以下代码确认全量数据里的缺失值情况:
print(df['your_column'].isna().sum()) print(df['your_column'].apply(type).unique())
这能帮你确认是否存在float类型的NaN或其他非字符串值。
内容的提问来源于stack exchange,提问作者Alejandro L
相关产品推荐
相关产品推荐

