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

移除含?的DataFrame行触发nothing to repeat错误的解决求助

解决DataFrame移除含"?"行时的正则报错问题

你遇到的error: nothing to repeat at position 0是因为?是正则表达式的特殊元字符,它用来表示匹配前面的元素0次或1次。当你直接用str.contains("?")时,正则引擎找不到?前面的可重复元素,所以抛出语法错误。而数字或字母不是正则元字符,所以用它们的时候不会报错。

另外你原来的代码还有个问题:循环里的筛选操作只是生成了临时的DataFrame切片,但没有把结果重新赋值给data,所以原数据根本不会被修改。

下面是两种可行的解决方案:

方案1:关闭正则匹配模式

直接告诉str.contains按普通字符串匹配,不用解析正则表达式,这样?就只是普通字符:

column_names = ["thick", "size_uni", "shape_uni", "marg_adh", 
                "size_epi_sieze", "bare_nuc", 
                "bland_chromo","norm_chromo", "mitosis", "outcome"]

data = data.astype(str)
# 筛选出所有指定列都不含"?"的行
data = data[~data[column_names].apply(lambda col: col.str.contains("?", regex=False)).any(axis=1)]

方案2:转义正则特殊字符

把?转义成普通字符,在Python字符串里用原始字符串r"\?"或者双反斜杠"\\?":

column_names = ["thick", "size_uni", "shape_uni", "marg_adh", 
                "size_epi_sieze", "bare_nuc", 
                "bland_chromo","norm_chromo", "mitosis", "outcome"]

data = data.astype(str)
data = data[~data[column_names].apply(lambda col: col.str.contains(r"\?")).any(axis=1)]

补充说明

  • ~用来取反,把"包含?"的行排除掉
  • .any(axis=1)用来检查每一行是否有任意一列包含"?",只要有一列包含就排除整行
  • 如果要检查DataFrame的所有列而不是指定列,直接去掉column_names,写成data[~data.apply(lambda col: col.str.contains("?", regex=False)).any(axis=1)]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 17:10:37