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()]