在大熊猫的时间之间排除

时间:2016-10-14 18:04:24

标签: python pandas numpy

我知道您可以使用pandas.DatetimeIndexpandas.DataFrame.between_time中选择数据。有没有一种方便的方法可以在pandas中排除两次?

例如,要在16:00到17:00之间排除数据,我目前正在执行以下操作。

In [1]: import pandas as pd
        import numpy as np

In [2]: df = pd.DataFrame(np.random.randn(24 * 60 + 1, 2), columns=list("AB"), index=pd.date_range(start="20161013 00:00:00", freq="1T", periods=24 * 60 +1))

In [3]: idx = df.index.hour == 16

In [4]: df = df[~idx]

In [5]: df.between_time("16:00", "17:00")
Out[5]: 
                            A         B
2016-10-13 17:00:00 -0.745892  1.832912

修改

我能够使用它:

In[41]:df2 = df.ix[np.setdiff1d(df.index, df.between_time("16:00", "17:00").index)]


In[42]:df2.between_time("15:59", "17:01")
Out[42]: 
                            A         B
2016-10-13 15:59:00  1.190678  0.783776
2016-10-13 17:01:00 -0.590931 -1.059962

有更好的方法吗?

2 个答案:

答案 0 :(得分:6)

您可以将between_timedrop结合使用:

df2 = df.drop(df.between_time("16:00", "17:00").index)

修改

另一种方法是利用between_time循环操作的事实,这样您就可以切换输入时间的顺序以排除它们之间的范围:

df.between_time("17:00", "16:00", include_start=False, include_end=False)

答案 1 :(得分:-1)

df['hour'] = df.index.hour
df[(df['hour'] < 16) | (df['hour'] > 17)]