检查一年是否在PeriodIndex中

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了检查一年是否在PeriodIndex中相关的知识,希望对你有一定的参考价值。

我有一个由PeriodIndex索引的DataFrame,需要检查索引是否包含一年。

这是我到目前为止所尝试的片段:

In [1]: import pandas as pd

In [2]: period_ix = pd.period_range(start='2018-07-01', end='2019-04-30', freq='W')

In [3]: '2018' in period_ix
Out[3]: False

In [4]: '2018' in period_ix.year
Out[4]: False

In [5]: 2018 in period_ix.year
Out[5]: True

In [6]: 2018 in period_ix
Out[6]: False

In [7]: '2019' in period_ix
Out[7]: True

In [8]: '2019' in period_ix.year
Out[8]: False

In [9]: 2019 in period_ix.year
Out[9]: True

In [10]: 2019 in period_ix
Out[10]: False

我已经使用int(year) in period_ix.year,因为它产生了每年的预期结果(无论是字符串还是int)。

但是,我有兴趣使用'2018' in period_ix,因为它看起来比我正在做的更新颖和更一致。我想如果一个人放入'2018',它被解释为'2018-01-01',因此在这里是假的。

答案

只是添加一点信息,partial string indexingPeriodIndex执行不同。你可以直接看到这个:

period_ix.get_loc('2018')
#KeyError: Period('2018-01-01/2018-01-07', 'W-SUN')

相关的行位于源代码中的here,所以你可以看到字符串'2018'被转换成

pd.period('2018', freq=period_ix.freq)
#Period('2018-01-01/2018-01-07', 'W-SUN')

在PeriodIndex中不存在。


您可以使用PeriodIndex._get_string_slice获得相同的部分字符串切片行为

period_ix[period_ix._get_string_slice('2018')]
#PeriodIndex(['2018-06-25/2018-07-01', '2018-07-02/2018-07-08',
#             '2018-07-09/2018-07-15', '2018-07-16/2018-07-22',
#             '2018-07-23/2018-07-29', '2018-07-30/2018-08-05',
#             '2018-08-06/2018-08-12', '2018-08-13/2018-08-19',
#             ....
#             '2018-12-24/2018-12-30', '2018-12-31/2019-01-06'],
#            dtype='period[W-SUN]', freq='W-SUN')

只用了一年,我同意你的int(year) in period_ix.year版本是合适的。虽然如果你想要部分年份和月份,你可能需要这样的东西:

not period_ix[period_ix._get_string_slice('2018-08')].empty
True

要么

def contains_partl(date, pidx):
    sl = pidx._get_string_slice(date)  #slice
    return sl.start != sl.stop

contains_partl('2018', period_ix)
#True

contains_partl('2018-05', period_ix)
#False

以上是关于检查一年是否在PeriodIndex中的主要内容,如果未能解决你的问题,请参考以下文章

Xcode中代码注释编写小技巧

XCode 中代码签名“调试”或“发布”的意义何在?

NSURLErrorDomain 中代码的含义是啥?

Javascript--练习(包括主界面图片轮播效果)

unity项目中代码中用到的类型总结

如何在 SQL Developer 中检查语法 Oracle 存储过程?