Python 熊猫过滤和比较日期
我有一个sql文件,它由下面的数据组成,我将这些数据读入pandasPython 熊猫过滤和比较日期,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
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
更好的解决方案是在asPandas
上提出的替代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, ]