首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >操纵Datetimeindex Pandas

操纵Datetimeindex Pandas
EN

Stack Overflow用户
提问于 2017-02-16 17:05:21
回答 1查看 178关注 0票数 0

我有一个包含DatetimeIndex的数据帧。我想创建一个输入,用户将写入日期,然后python将查找第一个经过的月份。

下面是一个示例: df是数据帧的名称

代码语言:javascript
复制
    date = input('Enter a date in YYYY-MM-DD format:  ')        
    Enter a date in YYYY-MM-DD format: 2017-01-31

我希望python将执行dfdate-1,然后打印结果,这样我就可以得到:

代码语言:javascript
复制
    2016-12-31    8.257478e+04

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

有什么想法吗?提前感谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-02-16 17:09:49

valueindex中的位置似乎需要get_loc,然后iloc才能选择:

代码语言:javascript
复制
pos = df.index.get_loc(d)
print (df.iloc[[pos - 1]])

示例:

代码语言:javascript
复制
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'

代码语言:javascript
复制
d = '2017-01-20'
pos = df.index.get_loc(d, method='nearest')
print (df.iloc[[pos - 1]])
            a
2016-12-31  1

但如果需要更一般的解决方案,您必须使用一些条件,如:

代码语言:javascript
复制
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]])
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42269289

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档