2017-07-27 123 views
0

我有一个范围从2000-2010的日常数据集。我已经通过如何从熊猫过滤特定月份日期时间索引

df.set_index(pd.DatetimeIndex(df['GregDate'])) 

作为索引设置了列'GregDate'。现在我只想调查从十一月到三月的十个月(十年)。

我的数据框看起来是这样的:

   Sigma  Lat  Lon 
GregDate         
2000-01-01 -5.874062 79.913437 -74.583125 
2000-01-02 -6.794000 79.904000 -74.604000 
2000-01-03 -5.826061 79.923939 -74.548485 
2000-01-04 -5.702439 79.916829 -74.641707 
... 
2009-07-11 -10.727381 79.925952 -74.660714 
2009-07-12 -10.648000 79.923667 -74.557333 
2009-07-13 -11.123095 79.908810 -74.596190 

[3482 rows x 3 columns] 

我已经在这个question一看,但我仍然是不能够解决我的问题。

回答

2

我认为你需要boolean indexingDatetimeIndex.monthIndex.isin

df = df[df.index.month.isin([11,12,1,2,3])] 
print (df) 
       Sigma  Lat  Lon 
GregDate         
2000-01-01 -5.874062 79.913437 -74.583125 
2000-01-02 -6.794000 79.904000 -74.604000 
2000-01-03 -5.826061 79.923939 -74.548485 
2000-01-04 -5.702439 79.916829 -74.641707 
+0

我用熊猫版本0.19.2,这是给我的错误“AttributeError的: 'numpy.ndarray' 对象没有属性'isin'“。 df.index.month是一个numpy数组;在这个解决方案可行之前,我不得不投入熊猫系列。这只是一个版本改变的事情? – EHB

+0

能够使用'alldat ['month'] = alldat.index.month进行筛选 alldat [alldat.month.isin([11,12,1,2,3])]' – EHB

+1

@EHB如果使用旧熊猫尝试numpy'df = df [np.in1d(df.index.month,[11,12,1,2,3])] print(df)',未经测试。 – jezrael

2
In [10]: df.query("index.dt.month in [11,12,1,2,3]") 
Out[10]: 
       Sigma  Lat  Lon 
GregDate 
2000-01-01 -5.874062 79.913437 -74.583125 
2000-01-02 -6.794000 79.904000 -74.604000 
2000-01-03 -5.826061 79.923939 -74.548485 
2000-01-04 -5.702439 79.916829 -74.641707 
相关问题