使用Pandas与Regex处理数据时遇TypeError问题求助
解决Pandas中替换带逗号数字时的TypeError问题
嘿,我来帮你捋捋这个问题!你遇到的TypeError: expected string or bytes-like object主要有两个核心原因,咱们一步步拆解修复:
问题根源
- Lambda参数传错了:你在
apply的lambda里用了df2(整个子DataFrame),而不是当前要处理的单个元素x——re.sub需要的是单个字符串输入,给它整个DataFrame肯定会报错。 - 存在非字符串类型值:如果
Description列里混有NaN或者数字类型的数据,直接用re.sub处理会因为输入不是字符串而触发错误。
修复方案
方案一:用Pandas内置的str.replace(推荐,更高效)
Pandas的字符串方法专门针对列级字符串操作优化,还能自动处理NaN,不用手动判断:
import pandas as pd df = pd.read_csv("C:/Users/Dell/Downloads/osc_samples_without.csv") # 直接用str.replace替换数字后的逗号/点 df['Description'] = df['Description'].str.replace(r'(?<=\d)[,\.]', '', regex=True)
方案二:修正apply的写法(适合需要自定义逻辑的场景)
如果你坚持用apply,要修正参数并处理非字符串/NaN的情况:
import pandas as pd import re df = pd.read_csv("C:/Users/Dell/Downloads/osc_samples_without.csv") df['Description'] = df['Description'].apply( lambda x: re.sub(r'(?<=\d)[,\.]', '', str(x)) if pd.notna(x) else x )
这里做了两个关键处理:
- 把每个元素
x转成字符串(str(x)),确保re.sub能正常接收输入 - 用
pd.notna(x)判断,避免处理NaN时出现异常
额外说明
你的正则表达式(?<=\d)[,\.]写得很准确——它会精准匹配数字后面的逗号或点,完全符合你要替换"12,000"这类格式里逗号的需求。
内容的提问来源于stack exchange,提问作者marcus
相关产品推荐
相关产品推荐

