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

Pandas DataFrame如何删除含至少一条异常数据的整天记录

Pandas 按自然日删除含异常值的全量记录方案

核心逻辑是先标记所有存在异常的日期,再批量过滤对应日期的所有行,完全不依赖异常出现位置,10万行规模下运行无性能压力。

实现步骤

  • 从时间索引中提取每条记录对应的自然日维度
  • 按自然日分组,识别出存在至少1条to_delete=True异常记录的日期
  • 过滤原数据集,剔除所有异常日期对应的行记录

代码实现

写法1:逻辑清晰易读(适合新手)

import pandas as pd

# 从带时区的时间索引提取对应自然日,避免时区转换导致日期偏移
df['cal_date'] = df.index.date

# 分组计算每个自然日是否存在异常,取出所有需要删除的日期
to_remove_dates = df.groupby('cal_date')['to_delete'].any()
to_remove_dates = to_remove_dates[to_remove_dates].index

# 过滤数据,删除临时列得到最终结果
df_clean = df[~df['cal_date'].isin(to_remove_dates)].drop(columns=['cal_date'])

写法2:简洁无临时列

不需要生成辅助列,直接对时间索引按天取整计算,代码更精简:

# 取出所有异常记录对应的日期(去重),直接过滤非异常日期的记录
df_clean = df[~df.index.floor('d').isin(df[df['to_delete']].index.floor('d').unique())]

方案优势

  • 不受异常值出现位置影响,不管异常在当日0点还是23点55分,都能准确删除当日全量数据
  • 不依赖单日固定288条记录的硬编码逻辑,即使存在数据缺采、补采的情况,也不会出现错删、漏删
  • 基于pandas原生向量化运算,10万行数据毫秒级完成计算,性能足够

拿给出的示例数据测试,2019-01-01、2019-01-03因为存在异常记录会被整段删除,最终仅保留2019-01-02的正常数据,完全符合需求。


内容的提问来源于stack exchange,提问作者Emanuel Gonçalves

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.01 15:31:57