2017-02-16 67 views
0

我有一個數據框有DatetimeIndex。我想創建一個輸入,用戶將寫入日期,然後python會查找第一個通過的月份。Manipulate Datetimeindex熊貓

下面是一個例子:df是

date = input('Enter a date in YYYY-MM-DD format: ')   
    Enter a date in YYYY-MM-DD format: 2017-01-31 

我想這蟒蛇會做DF [日期-1],然後打印出結果,使我得到數據框的名稱:

2016-12-31 8.257478e+04 

如果輸入日期已經在索引中,但有可能在輸入不是時找到方法。

任何想法?在此先感謝

回答

1

看來你需要get_loc用於在indexvalue然後iloc位置選擇:

pos = df.index.get_loc(d) 
print (df.iloc[[pos - 1]]) 

樣品:

start = pd.to_datetime('2016-11-30') 
rng = pd.date_range(start, periods=10, freq='M') 

df = pd.DataFrame({'a': range(10)}, index=rng) 
print (df) 
      a 
2016-11-30 0 
2016-12-31 1 
2017-01-31 2 
2017-02-28 3 
2017-03-31 4 
2017-04-30 5 
2017-05-31 6 
2017-06-30 7 
2017-07-31 8 
2017-08-31 9 

d = '2017-01-31' 

pos = df.index.get_loc(d) 
print (df.iloc[[pos - 1]]) 
      a 
2016-12-31 1 

如果dateindex添加method='nearest'

d = '2017-01-20' 
pos = df.index.get_loc(d, method='nearest') 
print (df.iloc[[pos - 1]]) 
      a 
2016-12-31 1 

但是,如果你有需要更廣泛的解決方案中使用了一些條件,如:

d = '2017-11-30' 

pos = df.index.get_loc(d, method='nearest') 
if pos == 0: 
    print ('Value less or same as minimal date in DataTimeIndex') 
else: 
    print ('Value nearest less or same as date', df.index[pos]) 
    print ('Previous value', df.iloc[[pos - 1]]) 
+0

曾爲真棒謝謝! – datascana