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

Pandas Dataframe应用正则函数报TypeError的解决问询

解决Pandas DataFrame应用正则函数时的TypeError问题

这个错误的核心原因有两个:一是你用错了apply()的用法,二是传入函数的df_item可能不是字符串类型(比如数值、NaN或者整列/整行的Series),导致正则的sub()方法无法处理。

问题拆解

  • 当你用df.apply(parse_repl)时,不管axis=0还是axis=1,传入parse_repl的都是整列或整行的Series对象,而不是单个单元格的字符串值,正则的sub()方法自然会报错。
  • 就算你解决了传入对象的问题,DataFrame里可能存在非字符串类型的数据(比如数值、缺失值NaN),直接传给sub()也会触发类型错误。

解决方案

1. 修正函数调用方式:用applymap()替代apply()

applymap()是Pandas专门用来逐单元格处理数据的方法,它会把每个单元格的值单独传入你的自定义函数,完美匹配你的需求:

df = df.applymap(parse_repl)
df.to_csv(...)

2. 优化正则处理函数,兼容非字符串和缺失值

修改你的parse_repl函数,先处理缺失值,再把所有输入转成字符串,确保正则方法能正常工作:

import pandas as pd

def parse_repl(df_item):
    # 处理缺失值,避免转成字符串后变成'NaN'
    if pd.isna(df_item):
        return df_item
    # 强制转成字符串类型,适配正则sub方法
    item_str = str(df_item)
    # 执行正则替换
    for pattern, replacement in d_comp.items():
        item_str = pattern.sub(replacement, item_str)
    # 如果需要保留原数据类型,可以尝试转回(可选,根据你的需求决定)
    # 比如原先是数值类型,替换后如果是数字字符串可以转回去:
    # try:
    #     return pd.to_numeric(item_str)
    # except ValueError:
    #     return item_str
    return item_str

额外说明

  • 确认你的d_comp字典里的pattern都是用re.compile()编译好的正则对象,这部分你已经提到了,没问题。
  • 如果只需要处理特定列,不需要整表处理,可以针对单个列用apply()(因为单列的apply()会逐元素传入):
    df['myField'] = df['myField'].apply(parse_repl)
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 04:08:38