选择两个DatetimeIndex日期之间的行

时间:2017-07-13 15:19:58

标签: python pandas time-series datetimeindex

我有以下格式的CSV文件:

vm,time,LoadInt1
abc-webapp-02,2017-05-31 10:00:00,3.133333
abc-webapp-02,2017-05-31 10:05:00,0.000000
abc-webapp-02,2017-05-31 10:10:00,0.000000
abc-webapp-02,2017-05-31 10:15:00,0.000000
abc-webapp-02,2017-05-31 10:20:00,0.000000
abc-webapp-02,2017-05-31 10:25:00,0.000000
abc-webapp-02,2017-05-31 10:30:00,0.000000
abc-webapp-02,2017-05-31 10:35:00,0.000000
abc-webapp-02,2017-05-31 10:40:00,0.000000

我使用以下代码将CSV文件读入DataFrame。日期被解析为索引(DatetimeIndex)

dateparse = lambda x: pd.datetime.strptime(x, '%Y-%m-%d %H:%M:%S')
df = pd.read_csv("my_file.csv", header=0, parse_dates=[1], index_col=1, date_parser=dateparse)

现在我尝试使用以下代码获取两个日期之间的所有行(真正的CSV文件在下面提到的日期之间有大量行):

df.loc['2017-05-30' : '2017-05-31']

请注意,建议使用以上方法here。但是,这对我不起作用。所以,这可能不是一个重复的问题。

2 个答案:

答案 0 :(得分:2)

  • 这种类型的索引切片包括端点,因此你所拥有的将包括整个样本集

    df.loc['2017-05-30':'2017-05-31']
    #df['2017-05-30':'2017-05-31']
    
                                    vm  LoadInt1
    time                                        
    2017-05-31 10:00:00  abc-webapp-02  3.133333
    2017-05-31 10:05:00  abc-webapp-02  0.000000
    2017-05-31 10:10:00  abc-webapp-02  0.000000
    2017-05-31 10:15:00  abc-webapp-02  0.000000
    2017-05-31 10:20:00  abc-webapp-02  0.000000
    2017-05-31 10:25:00  abc-webapp-02  0.000000
    2017-05-31 10:30:00  abc-webapp-02  0.000000
    2017-05-31 10:35:00  abc-webapp-02  0.000000
    2017-05-31 10:40:00  abc-webapp-02  0.000000
    
  • 这显示了同样的事情,但实际上是子集

    df.loc['2017-05-31 10:10':'2017-05-31 10:35']
    
                                    vm  LoadInt1
    time                                        
    2017-05-31 10:10:00  abc-webapp-02       0.0
    2017-05-31 10:15:00  abc-webapp-02       0.0
    2017-05-31 10:20:00  abc-webapp-02       0.0
    2017-05-31 10:25:00  abc-webapp-02       0.0
    2017-05-31 10:30:00  abc-webapp-02       0.0
    2017-05-31 10:35:00  abc-webapp-02       0.0
    
  • 您的导入可以缩小。您不需要解析器

    df = pd.read_csv("my_file.csv", parse_dates=[1], index_col=1)
    

答案 1 :(得分:2)

使用query方法:

df = pd.read_csv("my_file.csv", index_col=1, parse_dates=True)

In [121]: df.query("'2017-05-30' <= index <= '2017-06-01'")
Out[121]:
                                vm  LoadInt1
time
2017-05-31 10:00:00  abc-webapp-02  3.133333
2017-05-31 10:05:00  abc-webapp-02  0.000000
2017-05-31 10:10:00  abc-webapp-02  0.000000
2017-05-31 10:15:00  abc-webapp-02  0.000000
2017-05-31 10:20:00  abc-webapp-02  0.000000
2017-05-31 10:25:00  abc-webapp-02  0.000000
2017-05-31 10:30:00  abc-webapp-02  0.000000
2017-05-31 10:35:00  abc-webapp-02  0.000000
2017-05-31 10:40:00  abc-webapp-02  0.000000