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

使用Python3与Pandas解析Excel长日期查询数据返回空DataFrame问题

解决Pandas筛选Excel长日期返回空DataFrame的问题

问题根源

代码返回空结果,大概率是日期转换不彻底或者pandasql的日期匹配逻辑与Pandas内部datetime格式不兼容导致的。先排查日期转换是否成功,再调整筛选方式。

步骤1:验证日期转换是否正确

先打印转换后的Air date列,确认没有出现NaT(无效时间值):

print(df['Air date'].head())
print(df['Air date'].dtype)

如果输出中有NaT,说明指定的format="%A, %B %d, %Y"和Excel中的日期格式不完全匹配(比如存在多余空格、大小写差异)。可以去掉format参数,让Pandas自动推断格式:

df['Air date'] = pd.to_datetime(df['Air date'], errors='coerce')

errors='coerce'会把无法转换的值转为NaT,方便定位问题行。

步骤2:用Pandas原生筛选替代pandasql(更可靠)

pandasql处理datetime类型时易出现格式匹配问题,直接用Pandas布尔索引筛选更简单:

date_str = "2023-05-01"
target_date = datetime.datetime.strptime(date_str, '%Y-%m-%d').date()  # 转成date类型,避免时间部分干扰
result = df[df['Air date'].dt.date == target_date]
print(result)

如果Air date列转换后包含时间戳(如2023-05-01 00:00:00),用dt.date提取日期部分再匹配,就能规避时间戳的影响。

步骤3:坚持用pandasql的修正方案

pandasql基于SQLite,需将日期转为SQL可识别的格式,或用日期函数匹配:

date_str = "2023-05-01"
query = """
    SELECT *
    FROM df
    WHERE DATE("Air date") = '{}'
""".format(date_str)
result = sqldf(query)
print(result)

用DATE("Air date")提取日期部分,与字符串格式的2023-05-01匹配,避免datetime类型的格式差异。

完整修正代码示例(原生Pandas版本)

#!/usr/bin/env python3
import datetime
import pandas as pd

# 加载Excel,用第二行做表头
url = "~/Master Broadcast Schedule.xlsx"
df = pd.read_excel(url, sheet_name='2023', header=1)

# 转换日期列,自动推断格式,处理错误
df['Air date'] = pd.to_datetime(df['Air date'], errors='coerce')

# 筛选指定日期
target_date = datetime.datetime.strptime("2023-05-01", '%Y-%m-%d').date()
result = df[df['Air date'].dt.date == target_date]

print(result)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 15:13:03