Python Pandas日期过滤

时间:2019-07-08 13:03:29

标签: python pandas

我有一个Excel文件,其中包含要过滤的“开始日期”和“结束日期”列

使用以下提到的代码,一切都可以正常运行,但是仍然存在一个问题

问题-过滤数据后,我得到的结果超出了结束日期。例如-如果我的结束日期是2019年5月29日,那么我得到的结果将持续到2019年5月31日。我只希望结果保持在或小于结束日期。

如何实现?

使用的代码

df['QC START DATE'] = pd.to_datetime(df['QC START DATE'])
df = df[(((df['QC START DATE'] >= startdateEn.get()) &
 (df['QC START DATE'] <= endateEn.get())) | 
((df['QC END DATE'] >= startdateEn.get()) &
 (df['QC END DATE'] <= endateEn.get())))]

1 个答案:

答案 0 :(得分:0)

  

如果我将“开始日期”用作1/1/2019,将“结束日期”用作1/7/2019,则应进行过滤,因为我希望那些具有结束日期直到1/7/2019的条目,即使开始日期是不在1/1/2019

那么...如果我理解正确,那么您想要我们做的就是过滤结束日期?如果开始日期可能超出范围,那么您就不会对其进行过滤。我假设您想要的是两个日期范围之间的结束日期:start < end dates < end

假设您的数据采用日期时间格式:

import pandas as pd
from datetime import datetime
start_date = datetime_object = datetime.strptime('6/2/2018', '%m/%d/%Y')
end_date = datetime_object = datetime.strptime('12/2/2018', '%m/%d/%Y')
sub_set = dates[dates["end_date"].apply(lambda x: start_date <= datetime.strptime(x, '%m/%d/%Y') <= end_date)]
display (subset)

output:

dates
0   8/3/2018
1   9/13/2018
3   7/10/2018
4   10/20/2018
6   8/13/2018
7   10/8/2018
9   10/22/2018
12  8/30/2018
13  11/18/2018
14  7/3/2018
15  7/26/2018
19  10/20/2018
23  9/3/2018
24  10/19/2018
27  8/31/2018
30  9/27/2018
34  8/3/2018
36  8/26/2018
40  7/11/2018
41  9/6/2018
42  9/16/2018
48  8/22/2018