我想运行.loc
来捕获需要多个条件的数据子集。类似的东西:
df.loc[(
df["date"] > datetime.datetime.strptime('Jan 1 2000', '%b %d %Y').date() &
df["date"] < datetime.datetime.strptime('Jan 1 2009', '%b %d %Y').date() )]
当然,这种语法不正确。什么是正确的语法?
答案 0 :(得分:1)
当复合布尔条件时,由于运算符优先级需要添加括号,因此以下内容应该有效:
df.loc[( df["date"] > datetime.datetime.strptime('Jan 1 2000', '%b %d %Y').date()) & (df["date"] < datetime.datetime.strptime('Jan 1 2009', '%b %d %Y').date() )]
此外,我认为传递日期字符串进行比较会更容易:
In [6]:
df = pd.DataFrame({'a':pd.date_range(start=dt.datetime(2015,1,1), end=dt.datetime(2015,2,4))})
df[(df['a'] > '2015/01/14') & (df['a'] < '2015/02/01')]
Out[6]:
a
14 2015-01-15
15 2015-01-16
16 2015-01-17
17 2015-01-18
18 2015-01-19
19 2015-01-20
20 2015-01-21
21 2015-01-22
22 2015-01-23
23 2015-01-24
24 2015-01-25
25 2015-01-26
26 2015-01-27
27 2015-01-28
28 2015-01-29
29 2015-01-30
30 2015-01-31