Python 基于多准则的数据帧过滤

Python 基于多准则的数据帧过滤,python,pandas,Python,Pandas,我有一个数据帧df,它的头部看起来像: Shop Opening date 0 London NaT 22 Brighton 01/03/2016 27 Manchester 01/31/2017 54 Bristol 03/31/2017 69 Glasgow

我有一个数据帧
df
,它的头部看起来像:

               Shop       Opening date  
0            London                NaT  
22         Brighton         01/03/2016  
27       Manchester         01/31/2017  
54          Bristol         03/31/2017  
69          Glasgow         04/09/2017  
我还有一个变量
startPeriod
,设置为2017年4月1日;变量
endPeriod
的值为2017年6月30日

我试图基于
df
创建一个新的数据框,过滤掉所有没有日期的行(因此删除所有具有
开始日期
的NaT行),并过滤掉所有开始日期在startPeriod和endPeriod之间的行。因此,在上面的示例中,我只剩下以下新数据帧:

                 Shop       Opening date  
22           Brighton         01/03/2016  
69            Glasgow         04/09/2017 
我已尝试使用以下方法过滤掉“NaT”:

df1 = df['Opening date '] != 'NaT'

但我不确定如何也过滤掉
开始期间
/
结束期间
范围内的任何开始日期。

首先,要小心
df[“开始日期”]中日期后的空格。

尝试以下解决方案:

df1 = df[df['Opening date'] != 'NaT']
如果您创建正在创建的子集的副本会更好

df1 = df[df['Opening date'] != 'NaT'].copy()
您可以使用:

我认为过滤掉
NaN
s是没有必要的,但如果需要,它会链接新的条件:

df = df[df['date'].between('2016-03-01', '2017-04-05') & df['date'].notnull()]

使用
pd.Series.between
。另外,使用
pd.Series.isnull
代替字符串比较。非常感谢@jezerael。使用.between返回日期介于这些日期之间的行如果我想要不介于这些日期之间的日期,您知道如何执行吗?我会用~?谢谢,没错
df[~df['date']。在('2016-03-01','2017-04-05')]
之间,
~
用于反转布尔掩码。谢谢,我尝试了各种日期格式的组合,正在使用~但是我仍然会得到介于日期之间的行,不在外部,有什么想法吗?谢谢,阿加尼我不知道,它应该能用。如果
~
有相同的输出,如果忽略了它,则需要将数据帧日期列的类型更改为日期时间,并格式化日期yyyy-mm-dd。谢谢
df = df[df['date'].between('2016-03-01', '2017-04-05') & df['date'].notnull()]