如何使用Pandas查找具有特定日期的所有行?

时间:2014-01-30 23:28:50

标签: python pandas

我有一个包含DataFrame'valid_time'列的简单Pandas 'value'。采样的频率大致是每小时一次,但不规则且有一些大的间隙。我希望能够有效地拉出给定日期的所有行(即在日历日内)。如何使用DataFrame.where()或其他内容执行此操作?

我天真地想做这样的事情(显然不起作用):

dt = datetime.datetime(<someday>)
rows = data.where( data['valid_time'].year == dt.year and 
                    data['valid_time'].day == dt.day and 
                    data['valid_time'].month == dt.month)

上述代码至少存在一些问题。我是大熊猫的新手,所以我正在摸索一些可能很简单的事情。

2 个答案:

答案 0 :(得分:2)

对于像这样的事情,熊猫绝对是非常棒的。我建议您将日期时间字段作为索引here。如果您提供有关数据框架结构的更多信息,我很乐意提供更详细的说明。

然后,您可以使用df['1-12-2014']从日期中轻松抓取所有行,这些行将从2014年1月12日开始抓取所有内容。您可以使用df[1-2014]编辑该内容,以便从1月开始获取所有内容。如果您想从一系列日期和/或时间中获取数据,您可以执行以下操作:

df['1-2014':'2-2014']

Pandas非常强大,特别是对于时间索引数据。

答案 1 :(得分:0)

试试这个(就像你想法的延续一样):

import pandas as pd
import numpy.random as rd
import datetime

times =  pd.date_range('2014/01/01','2014/01/6',freq='H')
values = rd.random_integers(0,10,times.size)

data = pd.DataFrame({'valid_time':times, 'values': values})
dt = datetime.datetime(2014,1,3)
rows = data['valid_time'].apply(
    lambda x: x.year == dt.year and x.month==dt.month and x.day== dt.day 
    )

print data[rows]