2015-04-12 83 views
1

,我要筛选数据框是:如何过滤掉值值Pandas.DataFrame

  High Low Close Volume 
Date          
2014-06-02 634.8 622.5 628.6 13149746 
2014-06-03 638.7 628.2 637.5 10419625 
2014-06-04 647.9 636.1 644.8 11949821 
2014-06-05 649.4 642.6 647.4 10657616 
2014-06-06 651.3 644.5 645.6 12497800 
2014-06-09 93.9 91.8 93.7 74876982 
2014-06-10 95.0 93.6 94.2 62458587 
2015-06-11 94.8 93.5 93.9 45484122 

我想从2014年6月5日选择,例如当前日期(2015年-06-11)。通过比较日期列中的字符串来选择最合适的方式是什么?

+0

是日期列还是索引? – EdChum

+0

我是这个框架的绝对初学者。我没有使用set_index('Date'),所以我相信它是一个专栏。顺便说一句,当我尝试调用set_index('Date')时,它失败,解释器抱怨KeyError:'Date' – shorttermmem

+0

'df.columns'输出什么,这会告诉你它是否是一个列,这很重要,因为方法过滤将有不同的列和索引值 – EdChum

回答

2

我会转换成“日期”一栏D型日期时间,所以你能做的日期字符串比较,然后你可以做到以下几点:

In [26]: 

df[(df['Date'] > '2014-06-05') & (df['Date'] < '2015-06-11')] 
Out[26]: 
     Date High Low Close Volume 
4 2014-06-06 651.3 644.5 645.6 12497800 
5 2014-06-09 93.9 91.8 93.7 74876982 
6 2014-06-10 95.0 93.6 94.2 62458587 

所以首先转换:

df['Date'] = pd.to_datetime(df['Date']) 

然后布尔条件需要使用&运算符AND和由于运算符优先级的括号。

编辑

它看起来像你的“日期”的数据其实是在指数,在这种情况下,仍然可以执行的日期时间转换,像这样:df.index = pd.to_datetime(df.index),然后筛选这样的:

In [28]: 

df[(df.index > '2014-06-05') & (df.index < '2015-06-11')] 
Out[28]: 
      High Low Close Volume 
Date          
2014-06-06 651.3 644.5 645.6 12497800 
2014-06-09 93.9 91.8 93.7 74876982 
2014-06-10 95.0 93.6 94.2 62458587 
+0

谢谢,这可行! – shorttermmem