我有一个包含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)
上述代码至少存在一些问题。我是大熊猫的新手,所以我正在摸索一些可能很简单的事情。
答案 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]