我有一个数据框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
设置为1/04/2017日期和endPeriod
变量,其值为30/06/17
我正在尝试创建一个基于df
的新数据框,该数据框会过滤掉所有没有日期的行(因此删除任何带有Opening date
NaT的行)并过滤掉任何行在startPeriod和endPeriod之间有一个开放日期。因此,在上面的示例中,我将留下以下新数据帧:
Shop Opening date
22 Brighton 01/03/2016
69 Glasgow 04/09/2017
我试图过滤掉NaT'使用以下内容:
df1 = df['Opening date '] != 'NaT'
但我不确定如何过滤掉startPeriod
/ endPeriod
范围内的任何开放日期。
答案 0 :(得分:1)
您可以between
使用boolean indexing
:
df['date'] = pd.to_datetime(df['date'])
df = df[df['date'].between('2016-03-01', '2017-04-05')]
print (df)
Shop Opening date
2 27 Manchester 2017-01-31
3 54 Bristol 2017-03-31
我认为过滤掉NaN
是没有必要的,但如果需要,它会链接新条件:
df = df[df['date'].between('2016-03-01', '2017-04-05') & df['date'].notnull()]
答案 1 :(得分:0)
首先,请注意df['Opening date ']
试试这个解决方案:
df1 = df[df['Opening date'] != 'NaT']
如果你创建一个你正在制作的子集的副本
会好得多df1 = df[df['Opening date'] != 'NaT'].copy()