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

如何解决Pandas中日期格式不统一时筛选日期范围行返回空DataFrame?

解决Pandas中多格式日期筛选为空的问题

嘿,这个问题我太熟了!你得到空DataFrame的根本原因是——你的ColDate列还只是字符串类型,不同格式的字符串直接用between做比较,完全是按字符顺序来判断的,根本不是按实际日期大小,所以自然筛不到数据。下面给你一套两步走的解决方案:

第一步:统一转换日期列为Datetime类型

Pandas的pd.to_datetime函数超级智能,能自动识别绝大多数常见的日期格式(不管是yyyy-mm-dd、dd-mm-yyyy还是mm/dd/yyyy),我们先把字符串列转成标准的datetime类型:

import pandas as pd

# 你的原始数据
data = {
    'Col1': ['a', 'b', 'c', 'd', 'e', 'f'],
    'ColDate': ['2020-09-11 08:43:00', '2020-09-12 09:43:00', '13-09-2020 09:43:00',
                '09/16/2020 10:43:00', '09/19/2020 12:43:00', '09/12/2020 15:43:00']
}
df = pd.DataFrame(data)

# 转换日期列,infer_datetime_format=True让Pandas自动推断格式
df['ColDate'] = pd.to_datetime(df['ColDate'], infer_datetime_format=True)

第二步:按日期范围筛选

现在ColDate已经是datetime类型了,就可以正常用between来筛选了。注意如果要包含9月13日全天的数据,最好把上限设为2020-09-14(因为between是左闭右闭区间,2020-09-13默认指当天0点,会漏掉当天非凌晨的时间):

# 筛选2020年9月11日0点到9月14日0点之间的数据(即包含9.11-9.13全天)
filtered_df = df[df['ColDate'].between('2020-09-11', '2020-09-14')]
print(filtered_df)

执行后你会得到预期的结果:

Col1              ColDate
0    a 2020-09-11 08:43:00
1    b 2020-09-12 09:43:00
2    c 2020-09-13 09:43:00
5    f 2020-09-12 15:43:00

为什么原来的代码不行?

举个例子,你的原始数据里'13-09-2020'作为字符串,和'11-09-2020'比字符顺序是对的,但和'2020-09-11'比的话,字符串开头是'1' vs '2',Pandas会认为'13-09-2020'比'2020-09-11'小,自然会被排除在外,所以必须先转成datetime类型才能按实际时间逻辑比较。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 12:22:42