假设我有一个包含日期的列:
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)
没有运气。尽管我可以看到这两个日期之间的数据,但我得到一个空数据框。
如何检索这两个日期之间的数据? (请注意,日期本身可能不会出现在数据框中))。我可以为此使用查询吗?
最佳答案
如果你想使用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
你看,第一,d1
和 d2
必须转换为时间戳
。第二,d1
和d2
是外部变量,因此在查询中需要在它们前面添加@
。
关于python - 使用查询提取日期范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24542752/