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

如何在Pandas中筛选每年1月1日至2月9日的销售数据

用Pandas筛选每年1月1日至2月9日的销售数据

嘿,这个需求在Pandas里实现起来很直观,我给你拆解成几个简单步骤,还有几种不同的实现方式供你选择:

第一步:确保日期字段是datetime类型

首先得保证你的Date列是Pandas能识别的datetime格式,不然没法提取月日信息。如果原始数据是字符串格式,先转换:

import pandas as pd

# 假设你的数据存储在DataFrame df中
df['Date'] = pd.to_datetime(df['Date'])
# 如果日期格式不是默认的(比如是'YYYY/MM/DD'),可以指定format参数
# df['Date'] = pd.to_datetime(df['Date'], format='%Y/%m/%d')

第二步:筛选目标日期范围

这里有三种常用的实现方式,你可以根据自己的习惯选:

方式一:拆分月和日进行逻辑判断

直接通过dt.month和dt.day提取日期的月、日部分,组合筛选条件:

filtered_df = df[
    # 匹配1月的所有日期
    (df['Date'].dt.month == 1) |
    # 匹配2月1日至9日的日期
    ((df['Date'].dt.month == 2) & (df['Date'].dt.day <= 9))
]

逻辑很清晰:要么是1月的任意一天,要么是2月中不超过9号的日子。

方式二:转换为月日字符串进行范围筛选

把日期转换成MM-DD格式的字符串,利用字符串的字典序来筛选范围:

# 新增临时列存储月日信息
df['month_day'] = df['Date'].dt.strftime('%m-%d')
# 筛选'01-01'到'02-09'之间的数据
filtered_df = df[(df['month_day'] >= '01-01') & (df['month_day'] <= '02-09')]
# 用完临时列可以删掉
filtered_df = filtered_df.drop('month_day', axis=1)

这种写法不用拆分月和日,代码更简洁,而且因为是两位的月日,字符串比较的结果和日期顺序完全一致。

方式三:用query方法简化代码

Pandas的query方法可以让你用类似SQL的语法筛选数据,可读性很强:

filtered_df = df.query(
    "(Date.dt.month == 1) or (Date.dt.month == 2 and Date.dt.day <= 9)"
)

这种写法最接近自然语言,看起来一目了然。

小提示

  • 如果你的Date列已经是datetime类型,直接跳过第一步就行;
  • 不用担心闰年的问题,2月9日在平年和闰年都存在,不会有筛选异常;
  • 筛选完后可以用filtered_df.head()或者filtered_df['Date'].unique()检查一下结果是否符合预期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 06:32:44