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

从DataFrame筛选InvoiceDate在指定日期范围±7天内的行

解决方案

首先确认所有日期列均为datetime64类型,这是日期运算的基础。若读取CSV时未指定类型,先执行转换:

import pandas as pd

# 转换日期列格式
df["InvoiceDate"] = pd.to_datetime(df["InvoiceDate"])
df["CalcStartDate"] = pd.to_datetime(df["CalcStartDate"])
df["CalcEndDate"] = pd.to_datetime(df["CalcEndDate"])

接下来用pd.Timedelta做日期偏移——Pandas的向量化操作对大数据量效率极高,远优于逐行循环,完全不用顾虑性能问题:

# 筛选InvoiceDate在[CalcStartDate-7天, CalcEndDate+7天]范围内的行
filtered_df = df[
    (df["InvoiceDate"] >= df["CalcStartDate"] - pd.Timedelta(days=7)) &
    (df["InvoiceDate"] <= df["CalcEndDate"] + pd.Timedelta(days=7))
]

额外优化建议

  • 读取CSV时直接指定日期列,避免后续二次转换:
    df = pd.read_csv(
        "your_file.csv",
        parse_dates=["InvoiceDate", "CalcStartDate", "CalcEndDate"]
    )
    
  • 若数据量过大导致内存不足,可使用chunksize分块读取处理,再合并结果:
    chunk_list = []
    for chunk in pd.read_csv("your_file.csv", parse_dates=["InvoiceDate", "CalcStartDate", "CalcEndDate"], chunksize=10000):
        filtered_chunk = chunk[
            (chunk["InvoiceDate"] >= chunk["CalcStartDate"] - pd.Timedelta(days=7)) &
            (chunk["InvoiceDate"] <= chunk["CalcEndDate"] + pd.Timedelta(days=7))
        ]
        chunk_list.append(filtered_chunk)
    filtered_df = pd.concat(chunk_list)
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 12:10:22