当前位置: 代码迷 >> python >> 操纵Datetimeindex熊猫
  详细解决方案

操纵Datetimeindex熊猫

热度:56   发布时间:2023-06-16 14:13:55.0

我有一个具有DatetimeIndex的数据框。 我想创建一个输入,用户将输入日期,然后python将查找第一个通过的月份。

这是一个示例:df是数据框的名称

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

我希望python将执行df [date-1],然后打印结果,以便得到:

    2016-12-31    8.257478e+04

输入的日期可能已经在索引中,但是我正在寻找一种输入日期不在的方法。

有任何想法吗 ? 提前致谢

看来你需要为位置valueindexiloc选择:

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

如果date不在index添加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]])