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

使用Pandas与Regex处理数据时遇TypeError问题求助

解决Pandas中替换带逗号数字时的TypeError问题

嘿,我来帮你捋捋这个问题!你遇到的TypeError: expected string or bytes-like object主要有两个核心原因,咱们一步步拆解修复:

问题根源

  1. Lambda参数传错了:你在apply的lambda里用了df2(整个子DataFrame),而不是当前要处理的单个元素x——re.sub需要的是单个字符串输入,给它整个DataFrame肯定会报错。
  2. 存在非字符串类型值:如果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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 03:55:10