2016-08-03 51 views
0

我有包含列Date & Time一個數據幀,用含有在格式中的條目的每一行:MM/DD/YYYY HH:MM:SS切片,其包括時間範圍時間

我想能夠僅基於切片的數據幀日期範圍,例如:5/01/2016 to 5/30/2016

任何建議將不勝感激!

+0

dataframe where?在一個SQL表?你應該重做你的日期是一個db本地日期/日期時間值,然後你的問題就變成了一個微不足道的'日期'字段'2016-05-01'和'2016-05-30'' –

+0

'如果他們都是'日期時間對象;你可以簡單地減去它們並得到一個'timedelta'對象? – jacob

+0

不幸的是,我無法控制日期/時間格式。它是來自另一個我無法控制的應用程序對CSV文件的輸入,所以我需要能夠根據日期範圍進行報告;時間是無關緊要的。 – CCH

回答

0

你可以使用loc選擇數據框能滿足條件(日期之間間隔)成立的子集:

數據準備

In [13]: from io import StringIO 
    ...: import pandas as pd 
    ...: 

In [14]: df = pd.read_csv(StringIO(''' 
    ...: Date 
    ...: 5/01/2016 00:00:00 
    ...: 5/02/2016 00:00:00 
    ...: 5/03/2016 00:00:00 
    ...: 5/04/2016 00:00:00 
    ...: 5/05/2016 00:00:00 
    ...: 5/06/2016 00:00:00 
    ...: 5/07/2016 00:00:00 
    ...: 5/08/2016 00:00:00 
    ...: 5/09/2016 00:00:00 
    ...: 5/010/2016 00:00:00 
    ...: ''')) 

操作

In [15]: df['Date'] = pd.to_datetime(df['Date']) 

In [16]: start = "5/02/2016" 
    ...: end = "5/05/2016" 

In [17]: mask = (df['Date'] >= pd.to_datetime(start)) & (df['Date'] <= pd.to_datetime(end)) 

In [18]: df.loc[mask] 
Out[18]: 
     Date 
1 2016-05-02 
2 2016-05-03 
3 2016-05-04 
4 2016-05-05 
0

變量SDATE和EDATE

frame = [] 
record = 0 
for date,time in my_list: 
    if date == sdate or record == 1: 
    frame.append([date,time]) 
    record = 1 
    if date == edate: 
    break; 

print (frame)