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

Pandas筛选指定日期范围数据异常:代码无输出问题排查

Pandas日期筛选无输出问题解决

问题场景

需要从包含timestamp类型Date列的Pandas DataFrame中,筛选日期在2023-01-01至2023-01-31的所有行。测试数据如下:

df12=pd.DataFrame(data=['2023-01-02 09:15:00','2023-03-02 15:25:02','2023-03-02 15:45:00','2023-01-02 05:55:00','2023-03-02 05:55:00'],columns=['Date'])

数据展示:

Date
0   2023-01-02 09:15:00
1   2023-03-02 15:25:02
2   2023-03-02 15:45:00
3   2023-01-02 05:55:00
4   2023-03-02 05:55:00

执行以下代码后无输出,但预期应输出两行2023-01-02:

df12['Date'] = pd.to_datetime(df12['Date'])
df12['Date'].dt.date
start_date = '2023-01-01'
end_date = '2023-01-31'

date_range = pd.date_range(start=start_date, end=end_date)

for i in df12['Date'].dt.date:
    if i in date_range:
        print(i)

问题原因

代码中df12['Date'].dt.date返回的是Python原生datetime.date对象,而pd.date_range生成的是Pandas的Timestamp对象,两种类型的对象无法直接通过in判断匹配,导致条件永远不成立,因此没有输出。

解决方案

方案1:直接使用Timestamp范围做布尔索引(推荐)

无需转换为date对象,直接对Timestamp列进行范围筛选,这是Pandas最常用的高效筛选方式:

import pandas as pd

df12=pd.DataFrame(data=['2023-01-02 09:15:00','2023-03-02 15:25:02','2023-03-02 15:45:00','2023-01-02 05:55:00','2023-03-02 05:55:00'],columns=['Date'])
df12['Date'] = pd.to_datetime(df12['Date'])

start_date = '2023-01-01'
end_date = '2023-01-31'

# 筛选符合日期范围的行
filtered_rows = df12[(df12['Date'] >= start_date) & (df12['Date'] <= end_date)]

# 输出日期部分
for date in filtered_rows['Date'].dt.date:
    print(date)

执行后会输出:

2023-01-02
2023-01-02

方案2:统一类型后再判断

如果要保留原循环的思路,需要把date_range转换为datetime.date对象的集合,确保两边类型一致:

import pandas as pd

df12=pd.DataFrame(data=['2023-01-02 09:15:00','2023-03-02 15:25:02','2023-03-02 15:45:00','2023-01-02 05:55:00','2023-03-02 05:55:00'],columns=['Date'])
df12['Date'] = pd.to_datetime(df12['Date'])

start_date = '2023-01-01'
end_date = '2023-01-31'

# 将date_range转换为date对象的集合
date_set = set(pd.date_range(start=start_date, end=end_date).date)

for i in df12['Date'].dt.date:
    if i in date_set:
        print(i)

同样能得到预期的两行输出。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 19:47:34