Python 熊猫过滤和比较日期

Python 熊猫过滤和比较日期,python,pandas,Python,Pandas,我有一个sql文件,它由下面的数据组成,我将这些数据读入pandas df = pandas.read_sql('Database count details', con=engine, index_col='id', parse_dates='newest_available_date') 输出 id code newest_date_available 9793708 3514 2015-12-24 9792282 2399

我有一个sql文件,它由下面的数据组成,我将这些数据读入pandas

df = pandas.read_sql('Database count details', con=engine,
                     index_col='id', parse_dates='newest_available_date')
输出

id       code   newest_date_available
9793708  3514   2015-12-24
9792282  2399   2015-12-25
9797602  7452   2015-12-25
9804367  9736   2016-01-20
9804438  9870   2016-01-20
下一行代码是获取上周的日期

date_before = datetime.date.today() - datetime.timedelta(days=7) # Which is 2016-01-20
我想做的是,将
date\u之前的
df
进行比较,并打印出所有小于
date\u之前的行

if(df[“最新可用日期”]

显然,这会返回一个错误
序列的真值不明确。使用a.empty、a.bool()、a.item()、a.any()或a.all()。


我该怎么做呢?

我会做一个面具,比如:

a = df[df['newest_date_available'] < date_before]
使用
datetime.date(2019,1,10)
有效,因为
pandas
将日期强制为引擎盖下的日期时间。 但是,在未来版本的
pandas
中将不再如此

从版本0.24及更高版本开始,它现在发出警告:

FutureWarning:将日期时间序列与“datetime.date”进行比较。 当前,“datetime.date”被强制为datetime。未来 pandas不会强制,并且会引发TypeError

更好的解决方案是在as
Pandas
上提出的替代python datetime.datetime对象的方案

为了提供一个引用OP初始数据集的示例,您可以这样使用它:

import pandas
cond1 = df.newest_date_available < pd.Timestamp(2016,1,10)
df.loc[cond1, ]
导入熊猫
cond1=df.最新可用日期
我仍然得到错误
序列的真值不明确。使用a.empty、a.bool()、a.item()、a.any()或a.all()。
我复制了您的数据帧,并使用
df=pd.read\u剪贴板(parse\u dates=['latest\u date\u available'])
将其读回,然后该过程正常运行。试着这样做,如果你还有问题,请告诉我。请记住,
parse_dates
参数需要一个列表,因此在您的
pd.read_sql(parse_dates=['newst_available_data'])
。我用
print(a)
复制了
a=df[df['newst_date_available']
,它成功了!但是,当我试图把它放入<代码>如果语句时,我得到了错误,因为我想做一个类似于<代码>的事情,如果A是真的:合并ID与代码< /代码>类似的事情。考虑发布一个新的问题,你原来的问题只是关于一些规则的过滤和打印日期。谢谢。为什么
还要确保您的列是datetime类型。使用df.dtypes
import pandas
cond1 = df.newest_date_available < pd.Timestamp(2016,1,10)
df.loc[cond1, ]