You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用string_grouper遇TypeError:输入非纯字符串pandas.Series

解决string_grouper的TypeError问题:输入需为仅含字符串的pandas Series

问题场景

我正在使用string_grouper库的string_matching模块,根据客户个人数据查找可能的重复项,代码如下:

base1=pd.DataFrame(base[['Cliente','registro']])
matches = match_strings(base1['registro'], master_id =base1['Cliente'],ignore_index=True, min_similarity = 0.5,regex=r"[,-./]|\s", tfidf_matrix_dtype=np.float32)

运行时抛出如下错误:

TypeError                                 Traceback (most recent call last)
C:\Users\MXROBL~1\AppData\Local\Temp/ipykernel_1952/2333918413.py in <module>
      2 
      3 # Create all matches:
----> 4 matches = match_strings(base1['registro'], master_id =base1['Cliente'],ignore_index=True, min_similarity = 0.5,regex=r"[,-./]|\s", tfidf_matrix_dtype=np.float32)
~\Anaconda3\lib\site-packages\string_grouper\string_grouper.py in match_strings(master, duplicates, **kwargs)
     67     :return: pandas.Dataframe
     68     """
---> 69     string_grouper = StringGrouper(master, duplicates=duplicates, **kwargs).fit()
     70     return string_grouper.get_matches()
     71 
~\Anaconda3\lib\site-packages\string_grouper\string_grouper.py in __init__(self, master, duplicates, **kwargs)
    126         if not StringGrouper._is_series_of_strings(master) or \
    127                 (duplicates is not None and not StringGrouper._is_series_of_strings(duplicates)):
---> 128             raise TypeError('Input does not consist of pandas.Series containing only Strings')
    129 
    130         self._config: StringGrouperConfig = StringGrouperConfig(**kwargs)
TypeError: Input does not consist of pandas.Series containing only Strings

错误原因

报错明确指出,match_strings要求输入的master(此处为base1['registro'])以及master_id对应的Series必须是仅包含字符串类型的pandas Series。你的输入中至少有一个Series存在非字符串类型的数据(比如数字、空值、混合类型等)。

解决步骤

  • 检查数据类型与内容
    先确认两个Series的数据类型,定位非字符串数据:

    # 查看各列数据类型
    print(base1.dtypes)
    # 找出registro列中非字符串的行
    print(base1[~base1['registro'].apply(lambda x: isinstance(x, str))])
    # 找出Cliente列中非字符串的行
    print(base1[~base1['Cliente'].apply(lambda x: isinstance(x, str))])
    
  • 强制转换为字符串并处理空值
    将两个Series统一转换为字符串类型,同时替换转换后出现的"nan"字符串(避免原空值干扰匹配):

    base1['registro'] = base1['registro'].astype(str).replace('nan', '')
    base1['Cliente'] = base1['Cliente'].astype(str).replace('nan', '')
    
  • 过滤无效空字符串(可选)
    如果转换后存在空字符串,可过滤掉这些行提升匹配质量:

    base1 = base1[(base1['registro'] != '') & (base1['Cliente'] != '')]
    
  • 重新执行匹配代码
    完成上述处理后,再次运行原匹配逻辑即可:

    matches = match_strings(base1['registro'], master_id =base1['Cliente'],ignore_index=True, min_similarity = 0.5,regex=r"[,-./]|\s", tfidf_matrix_dtype=np.float32)
    

内容的提问来源于stack exchange,提问作者fernandaluqueno

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 10:54:14