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

如何在Python DataFrame中筛选日期列等于昨日的数据

筛选DataFrame中昨日数据的解决方案

问题关键点

你当前代码里的df['Date'] = df['Date'].dt.strftime('%Y-%m-%d')会把datetime类型转为字符串,这直接导致后续无法用datetime相关方法做日期筛选,这是核心问题。另外原始日期带Z标识(UTC时区),处理时必须保证时区一致性,否则会出现日期匹配偏差。

修正后的完整代码

import pandas as pd
from datetime import datetime, timedelta
import pytz

# 1. 正确处理日期列(保留datetime类型,明确UTC时区)
# 处理df的Date列,注意格式要匹配带Z的原始日期
df['Date'] = pd.to_datetime(df['Date'], format="%Y-%m-%dT%H:%M:%S.%fZ", errors='coerce')
df['Date'] = df['Date'].dt.tz_localize('UTC')  # 标记为UTC时区

# 处理merged_left的releaseDate列,确保为datetime类型
merged_left['ResponseData releaseDate'] = pd.to_datetime(merged_left['ResponseData releaseDate'], errors='coerce')
# 如果releaseDate原始也是UTC时区,同样标记:
# merged_left['ResponseData releaseDate'] = merged_left['ResponseData releaseDate'].dt.tz_localize('UTC')

# 2. 计算UTC时区的昨日日期
yesterday_utc = datetime.now(pytz.utc) - timedelta(days=1)
yesterday_date = yesterday_utc.date()

# 3. 筛选昨日数据
# 筛选df中Date列日期等于昨日的行
df_yesterday = df[df['Date'].dt.date == yesterday_date]

# 筛选merged_left中releaseDate等于昨日的行
merged_left_yesterday = merged_left[merged_left['ResponseData releaseDate'].dt.date == yesterday_date]

额外说明

  • 若需基于本地时区的昨日(而非UTC),将datetime.now(pytz.utc)替换为对应时区,例如中国时区:datetime.now(pytz.timezone('Asia/Shanghai')),再提取日期部分。
  • 务必保证所有日期列的时区统一,否则会出现“明明有数据却筛选不到”的情况。
  • 之前尝试失败的原因:要么日期列被转成字符串无法调用dt.date方法,要么本地时区和UTC时区的“昨日”范围不一致,导致匹配失败。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 23:25:02