python - 使用查询提取日期范围

标签 python pandas

假设我有一个包含日期的列:

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

你看,第一,d1d2 必须转换为时间戳。第二,d1d2是外部变量,因此在查询中需要在它们前面添加@

关于python - 使用查询提取日期范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24542752/

相关文章:

python - Gunicorn(Python3.4 和 3.3)仅在响应中发送没有数据的 header

python - 如何根据图像上旋转矩形的坐标制作蒙版?

python - 如何在几个类上使用一个列表而不影响该列表

python - IoU 在 python/caffe 中实现每个类的语义分割

python - 如何将参数传递给 Tkinter 按钮的回调命令?

python - 是否有更有效的方法来获取一行中的值并将其应用到同一列中的下一个 'n' 行? Pandas

python - 如何在 pandas 数据框中有一个空的第一行

python - pandas 绘制跳过 xtick 标签

python - 使用Python进行CSV数据分析

python - 检查交易组之间的值是否发生变化