SQLite获取今日日期及Pandasql查询空DataFrame问题咨询
嘿,我来帮你搞定这两个问题!
问题1:如何在SQLite中获取今日日期?
在SQLite里获取今日日期有几种简单实用的方式:
- 最常用的是
date('today'),它会返回YYYY-MM-DD格式的今日日期(比如2024-05-20)。 - 如果需要带时间的完整日期时间,可以用
datetime('now', 'localtime'),返回格式是YYYY-MM-DD HH:MM:SS;要是只需要日期部分,date('now')和date('today')效果完全一样。
问题2:Pandasql查询返回空DataFrame的解决方法
咱先拆解你代码里的问题——你用了 e.Date >= date('today') 却返回空结果,大概率是数据类型不匹配或者日期格式不一致导致的,给你几个针对性的解决方案:
方案1:统一日期类型,提取日期部分比较
首先确保你的Date列是datetime类型(不是字符串),然后在查询里提取日期部分来和今日日期对比,这是最稳妥的方式:
# 先把Date列转换成datetime类型 import pandas as pd df_event['Date'] = pd.to_datetime(df_event['Date']) # 修改查询语句,用date()函数提取日期部分 q = """ select e.Date, e.SITA, e.Events from df_event e where date(e.Date) >= date('today') """ df_event2import = pandasql.sqldf(q, locals())
不管你的Date列有没有时间戳(比如2024-05-20 14:30:00),这个方法都会只拿日期部分来比较,避免时间干扰。
方案2:直接用你定义的today变量
你已经生成了today = now.strftime("%Y-%m-%d"),可以直接把这个变量代入查询,注意要加单引号(SQL里字符串需要引号包裹):
q = f""" select e.Date, e.SITA, e.Events from df_event e where e.Date >= '{today}' """ df_event2import = pandasql.sqldf(q, locals())
不过这个方法要保证df_event['Date']的格式和YYYY-MM-DD完全一致,或者Date列已经是datetime类型(Pandas会自动处理字符串和datetime的比较)。
方案3:先检查你的Date列数据
要是上面的方法还不行,先确认Date列的真实情况,排查格式或类型问题:
# 查看Date列的前几行数据和类型 print(df_event['Date'].head()) print(df_event['Date'].dtype)
如果是object类型(字符串),但格式不是YYYY-MM-DD(比如是20/05/2024),那得先转换成正确格式:
# 假设你的日期格式是DD/MM/YYYY,转换成YYYY-MM-DD df_event['Date'] = pd.to_datetime(df_event['Date'], format='%d/%m/%Y').dt.strftime('%Y-%m-%d')
这里的format参数要根据你实际的日期格式调整,比如MM/DD/YYYY就改成%m/%d/%Y。
内容的提问来源于stack exchange,提问作者Sorath
相关产品推荐
相关产品推荐

