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

基于当前季度过滤数据集遇属性错误及无数据场景处理咨询

问题解决:按当前季度过滤数据集及无数据处理方案

一、问题背景

尝试基于当前季度过滤数据集,遇到AttributeError: 'Series' object has no attribute 'contains'错误,同时咨询当前季度无数据时的处理方式,是否可使用IF ELSE函数。

原始数据集示例

ID生效日期季度
012023-05-012023Q2
022023-03-012023Q1

二、报错原因与修正

报错原因

Pandas的Series对象没有contains方法,你误用了字符串的contains调用方式,需使用Series专属的str.contains()方法,或更高效的直接类型匹配。

修正后的完整代码

from datetime import datetime
import pandas as pd

# 简化当前季度生成逻辑
def get_current_quarter():
    m = datetime.today().month
    y = datetime.today().year
    quarter = (m - 1) // 3 + 1
    return f"{y}Q{quarter}"

ss = get_current_quarter()

# 数据预处理
df['effective_dt'] = pd.to_datetime(df['effective_dt'])
df['quarter'] = df['effective_dt'].dt.to_period('Q')

# 正确过滤:直接匹配Period类型(推荐,效率更高)
filtered_df = df[df['quarter'] == ss]

# 若需模糊匹配,可使用以下方式
# filtered_df = df[df['quarter'].astype(str).str.contains(ss)]

三、当前季度无数据的处理方案

完全可以使用IF ELSE逻辑处理无数据场景,示例如下:

if filtered_df.empty:
    # 无数据时的自定义逻辑
    print(f"当前季度{ss}无可用数据")
    # 可选操作:返回上一季度数据、全量数据或默认值
    # filtered_df = df[df['quarter'] == f"{datetime.today().year}Q{(datetime.today().month-1)//3}"]
else:
    # 有数据时的后续处理
    print(f"成功筛选出{len(filtered_df)}条当前季度数据")
    # 执行你的业务操作,比如数据导出、分析等

关键提示

  • 直接匹配Period类型比字符串转换后匹配更高效,避免不必要的类型转换开销
  • 无数据时的处理逻辑可根据业务需求灵活调整,比如触发告警、返回历史替代数据等

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 11:20:17