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

如何在Pandas中筛选英文月份缩写格式的特定月份行数据

筛选Pandas DataFrame中特定月份的行

我来帮你解决这个问题——用str.contains没得到预期结果,大概率是因为没用到最可靠的日期处理方式,或是你的测试数据刚好全是May,导致看起来没变化。下面给你两种可行方案,优先推荐第一种,因为后续处理日期也更方便:

方案一:将DATE列转为datetime类型(推荐)

把字符串格式的日期转为Pandas的datetime类型后,筛选月份会更准确,还能避免字符串匹配的各种坑(比如大小写、隐藏字符)。

  1. 转换日期列:
    你的日期格式是dd-mon-yy(比如01-May-07),用pd.to_datetime指定格式解析:

    import pandas as pd
    df['DATE'] = pd.to_datetime(df['DATE'], format='%d-%b-%y')
    

    这里%d对应两位日期,%b对应英文月份缩写(如May、Jun),%y对应两位年份(07会自动转为2007,17转为2017)。

  2. 筛选特定月份:
    可以用月份数字或月份名称两种方式筛选:

    • 用月份数字(5=May,6=Jun):
      filtered_df = df[df['DATE'].dt.month.isin([5, 6])]
      
    • 用月份名称(注意是全称,dt.month_name()返回完整月份名):
      filtered_df = df[df['DATE'].dt.month_name().isin(['May', 'June'])]
      

方案二:直接对字符串列进行匹配(仅当无法转datetime时使用)

如果因为某些原因不能转换日期类型,可以用更精确的字符串匹配来筛选:

  1. 先确认DATE列是字符串类型:

    print(df['DATE'].dtype)  # 正常应该输出object
    
  2. 用正则匹配中间的月份部分:
    匹配-May-或-Jun-这样的子串,确保只匹配日期中的月份部分:

    filtered_df = df[df['DATE'].str.contains(r'-May-|-Jun-', regex=True)]
    

    或者提取中间的三个字母再筛选:

    filtered_df = df[df['DATE'].str.extract(r'-(...)-')[0].isin(['May', 'Jun'])]
    

为什么你之前的方法没效果?

如果你的测试数据里全是May的行,那str.contains('May')当然会返回所有行,看起来和输入一致。如果实际数据有其他月份却没筛选出来,可能是DATE列不是字符串类型,或是字符串里有隐藏的空格/特殊字符导致匹配失败——这也是为什么转datetime是更稳妥的选择。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 06:52:06