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

如何基于Datetime Index删除Pandas DataFrame指定月份的多行数据

如何通用删除Pandas DataFrame中指定月份的行?

我有一个带有Datetime Index的Pandas DataFrame,包含4月和5月的数据(原始DataFrame包含更多列)。希望删除5月的所有行(索引范围为2022-05-01 00:00:00至2022-05-31 23:45:00)。目前通过硬编码索引标签实现,但想要更通用的方法,无需硬编码日期,以便数据变更或需删除其他月份时无需修改代码。

现有硬编码代码:

start_remove = pd.to_datetime('2022-05-01 00:00:00')
end_remove = pd.to_datetime('2022-05-31 23:45:00')
df = df.loc[(df.index < start_remove) | (df.index > end_remove)]

样本数据集:

date                   Open      Close       High      Low 
...
2022-04-30 23:30:00     10         11.4          10.2        10.7    
2022-04-30 23:45:00     18         17.2          17.2        15.8    
2022-05-01 00:00:00     24         24            24.8        24.8  
2022-05-01 00:15:00     59         58            60          60.3 
2022-05-01 00:30:00     43.7       43.9          48          48  
...
...
2022-05-31 23:45:00     41.7       53.9          51          50  

通用解决方案

方法1:直接通过月份属性过滤

利用Datetime Index自带的month和year属性,直接筛选出非目标月份的行,无需硬编码具体日期:

# 删除2022年5月的所有行
df = df[~((df.index.year == 2022) & (df.index.month == 5))]

如果不需要限制年份(删除所有年份的5月数据),可以简化:

df = df[df.index.month != 5]

方法2:封装为可复用函数

如果需要频繁处理不同月份,写一个函数来复用逻辑:

def drop_month_data(df, year, month):
    return df[~((df.index.year == year) & (df.index.month == month))]

# 调用示例:删除2022年5月数据
df = drop_month_data(df, 2022, 5)

方法3:精确控制月份首尾时刻

如果需要像原代码那样精确到月份最后一天的23:45,可以用pd.Period生成月份范围,再自定义结束时间:

# 指定目标月份
target_month = pd.Period('2022-05', freq='M')
start_remove = target_month.start_time
# 设定当月最后一天的23:45为结束时间
end_remove = target_month.end_time.replace(hour=23, minute=45)

df = df.loc[(df.index < start_remove) | (df.index > end_remove)]

这样只需修改target_month的参数(如'2023-06'),就能快速切换要删除的月份,无需手动写死日期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 00:37:08