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

如何基于Pandas DataFrame单列值的特定序列删除指定记录

实现思路
  • 先通过正则定义两种目标格式的匹配规则,同时提取格式中的数值x、y用于校验一致性:
    • ^null,null,(\d+),(\d+)$ 匹配null,null,x,y格式,捕获x、y值
    • ^(\d+),(\d+),null,null$ 匹配x,y,null,null格式,捕获x、y值
  • 用大小为3的滑动窗口遍历value列,逐一校验连续3行是否符合「null,null,x,y」→「x,y,null,null」→「null,null,x,y」的序列,且三个值中的x、y完全一致
  • 所有匹配成功的序列,将对应后两行的索引加入待删除集合
  • 最终过滤原表删除待删除索引的行,得到处理结果
可运行代码示例
import pandas as pd
import re

# 正则匹配规则
pattern_null_start = re.compile(r'^null,null,(\d+),(\d+)$')
pattern_null_end = re.compile(r'^(\d+),(\d+),null,null$')

# 此处可替换为你的数据读取逻辑,例如 pd.read_csv("数据文件路径")
df = pd.DataFrame(
    data=[
        ["seed", "57", "2021-08-01 09:49:23"],
        ["ghy", "869", "2021-08-02 09:50:12"],
        ["repo", "5324", "2021-09-03 10:49:23"],
        ["repo", "null", "2021-09-03 11:49:23"],
        ["harv", "12", "2021-09-05 09:43:23"],
        ["weig", "5,37,12", "2021-09-06 09:25:12"],
        ["repo", "null,null,4,8", "2021-09-07 09:12:23"],
        ["repo", "4,8,null,null", "2021-09-07 10:49:23"],
        ["repo", "null,null,4,8", "2021-09-08 17:49:23"],
        ["repo", "4,8,1,3", "2021-09-09 12:12:23"],
        ["repo", "1356", "2021-09-10 12:49:23"]
    ],
    columns=["事件(event)", "值(value)", "时间(time)"]
)

drop_indexes = set()
total_rows = len(df)

# 滑动窗口匹配序列
for idx in range(total_rows - 2):
    val_0 = df.iloc[idx]["值(value)"]
    val_1 = df.iloc[idx + 1]["值(value)"]
    val_2 = df.iloc[idx + 2]["值(value)"]

    # 校验第一个值格式并提取x、y
    match_0 = pattern_null_start.match(val_0)
    if not match_0:
        continue
    x, y = match_0.groups()

    # 校验第二个值格式和x、y一致性
    match_1 = pattern_null_end.match(val_1)
    if not match_1 or match_1.groups() != (x, y):
        continue

    # 校验第三个值格式和x、y一致性
    match_2 = pattern_null_start.match(val_2)
    if not match_2 or match_2.groups() != (x, y):
        continue

    # 匹配成功,标记后两行待删除
    drop_indexes.add(idx + 1)
    drop_indexes.add(idx + 2)

# 生成结果表
result_df = df.drop(drop_indexes).reset_index(drop=True)
print(result_df)
结果说明

第一个示例数据运行后,会删除2021-09-07 10:49:23、2021-09-08 17:49:23对应的两行,输出与预期一致。第二个示例因为未匹配到完整的三段序列,无行被删除,输出与原表一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 02:45:03