说我有一个日期列:
df.my_dates
0 2014-06-08
1 2014-03-01
...
148 2014-06-25
149 2014-06-02
Name: my_dates, Length: 150, dtype: datetime64[ns]
以下日期:
> d1
datetime.datetime(2014, 6, 5, 0, 0)
> d2
datetime.datetime(2014, 6, 9, 0, 0)
我想提取这两个日期之间的所有条目。我试过了:
# The statement below translates into "'2014-06-05' > my_dates > '2014-06-09'"
my_query = "'{}' > my_dates > '{}'".format(d1.strftime("%Y-%m-%d"),
d2.strftime("%Y-%m-%d"))
df.reset_index().query(my_query)
没有运气。我得到一个空数据帧,即使我可以看到这两个日期之间的数据。
如何在这两个日期之间检索数据? (请注意,数据框中的日期可能不会出现))。我可以使用查询吗?
答案 0 :(得分:1)
您可以按多个条件使用常规过滤:&
运算符和每个条件的括号。熊猫能够比较开箱即用的日期。
import pandas as pd
from datetime import datetime
df = pd.DataFrame({"date": pd.date_range(start='2014-06-02', freq='2D',
periods=50),
"value": 1})
d1 = datetime(2014, 6, 5, 0, 0)
d2 = datetime(2014, 6, 9, 0, 0)
df = df[(df['date'] > d1) & (df['date'] < d2)]
print df
打印:
date value
2 2014-06-06 1
3 2014-06-08 1
答案 1 :(得分:1)
如果您想使用query
方法,则需要更改两件事:
In [32]:
from datetime import datetime
d1 = datetime(2014, 6, 5, 0, 0)
d2 = datetime(2014, 6, 9, 0, 0)
d1=pd.to_datetime(d1) #or pd.DatetimeIndex(d1)
d2=pd.to_datetime(d2)
print df
val
0 2014-06-08
1 2014-03-01
148 2014-06-25
149 2014-06-02
In [33]:
print df.query('(@d1 < val)&(val<@d2)')
val
0 2014-06-08
您看,第1个,d1
和d2
必须转换为timestamps
。第二,d1
和d2
是外部变量,因此在查询中需要@
。