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

如何在Pandas DataFrame中移除包含连续数字的行

解决DataFrame移除含连续递增数字行的问题

问题根源

你之前的代码有两个核心问题:

  1. 第一段代码的正则r'\{3,}'完全错误,它匹配的是{3,}这个字符串而非数字,导致mask全为False,最终过滤结果异常。
  2. 第二段代码用的r'\d{3,}'只是匹配任意3位及以上的数字串(比如112233也会被检测到),但这不是你要的1234、6789这类连续递增的数字序列,所以无法精准移除目标行。

两种可行解决方案

方案一:自定义函数检测连续递增数字(直观易维护)

通过遍历字符串,检查是否存在长度≥3的连续递增数字子串:

import pandas as pd

# 替换成你的实际DataFrame
df1 = pd.DataFrame({'prix': ['abc123def', 'xyz6789', '112233', 'test456', 'normal_text']})

# 确保列转为字符串类型
df1['prix'] = df1['prix'].astype(str)

def has_consecutive_increasing_digits(s):
    # 遍历所有可能的3位数字起始位置
    for i in range(len(s) - 2):
        # 检查当前及后两位是否都是数字
        if s[i].isdigit() and s[i+1].isdigit() and s[i+2].isdigit():
            num1, num2, num3 = int(s[i]), int(s[i+1]), int(s[i+2])
            # 判断是否连续递增(后一个数字比前一个大1)
            if num2 == num1 + 1 and num3 == num2 + 1:
                return True
    return False

# 生成标记:True表示该行包含连续递增数字
mask = df1['prix'].apply(has_consecutive_increasing_digits)

# 移除目标行(~表示取反,保留不匹配的行)
df_filtered = df1[~mask]

print(df_filtered)

方案二:枚举式正则匹配(简洁高效)

因为3位连续递增数字只有8种可能(012、123...789),直接用正则枚举匹配:

import pandas as pd

df1 = pd.DataFrame({'prix': ['abc123def', 'xyz6789', '112233', 'test456', 'normal_text']})
df1['prix'] = df1['prix'].astype(str)

# 正则枚举所有3位连续递增数字序列
pattern = r'(012|123|234|345|456|567|678|789)'
# 标记包含目标序列的行
mask = df1['prix'].str.contains(pattern)
# 移除目标行
df_filtered = df1[~mask]

print(df_filtered)

说明

两种方案都能精准识别123、6789这类包含连续递增数字的行,取反mask即可移除这些行。如果需要匹配更长的连续序列(比如4位),方案一无需修改即可检测(4位序列必然包含3位子序列),方案二也能自动覆盖(比如1234包含123,会被正则匹配到)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 23:30:36