2013-05-02 88 views
2

因此,我有一个大型熊猫DataFrame,其中包含大约两个月的信息,每秒钟有一行信息。太多的信息需要立即处理,所以我想抓住特定的时间表。下面的代码将2012年2月5日之前抢的一切:抓取DataFrame中特定日期之间的选择

sunflower[sunflower['time'] < '2012-02-05'] 

我想要做的这相当于:

sunflower['2012-02-01' < sunflower['time'] < '2012-02-05'] 

但这是不允许的。现在,我可以用这两条线这样做:

step1 = sunflower[sunflower['time'] < '2012-02-05'] 
data = step1[step1['time'] > '2012-02-01'] 

,但我有20个不同的DataFrames并进行多次,并能很容易地做到这将是很好的做到这一点。我知道大熊猫是这个能力,因为如果我的日期是指数而不是一列,这很容易做到,但因为日期重复他们无法索引,因此您收到此错误:

Exception: Reindexing only valid with uniquely valued Index objects 

那么我该如何去做这件事?

回答

8

您可以单独定义屏蔽:

df = DataFrame('a': np.random.randn(100), 'b':np.random.randn(100)}) 
mask = (df.b > -.5) & (df.b < .5) 
df_masked = df[mask] 

或者在同一行:

df_masked = df[(df.b > -.5) & (df.b < .5)] 
+0

不会说是非常低效的,如果这是一个反复的过程。我想看看这么多的数据,所以我必须经常输入这3行。这就是为什么我在寻找一个单线程编号 – 2013-05-02 15:24:34

+0

。 – qua 2013-05-02 15:43:14

+0

这实际上是非常有效的(不管它是否是单行)。掩码只是一个布尔数组。使用2个术语只是和另一个术语(或环),非常有效。并且你只做了一次(数据帧采用布尔值掩码并将其应用于底层numpy数据) – Jeff 2013-05-02 15:49:32