【问题标题】:Pandas is a Timestamp within a Period熊猫是一个时期内的时间戳
【发布时间】:2017-03-11 22:36:13
【问题描述】:

我有一个时间戳

tstamp = pd.to_datetime('01/11/2017')
tstamp
->> Timestamp('2017-01-11 00:00:00')

我有月经

per = pd.Period('01/03/2017', 'M')
per
->> Period('2017-01', 'M')

我想知道我的时间戳是否在我的经期内。例如是 2017 年 1 月 11 日(我的 tstamp)在 2017 年 1 月期间(我的 per)

tstamp in per # doesn't work
pd.Series(tstamp).isin([per]) 
->> TypeError: object of type 'pandas._period.Period' has no len()

似乎无法弄清楚,我宁愿不做类似的事情:

tstamp < per.to_timestamp()+pd.Timedelta(1,'M') & tstamp > per.to_timestamp()

只是因为它不适用于我在其余时间对数据进行的计算。

【问题讨论】:

  • 如果您将 Period 转换为名为 ival 的 pandas 间隔,则表达式“tstamp in ival”可以满足您的需求。

标签: python pandas timestamp period


【解决方案1】:

你可以使用period.start_timeperiod.end_time属性:

In [134]: per.start_time
Out[134]: Timestamp('2017-01-01 00:00:00')

In [135]: per.end_time
Out[135]: Timestamp('2017-01-31 23:59:59.999999999')

演示:

In [128]: tstamp = pd.to_datetime(['01/11/2017', '2017-06-01'])

In [129]: tstamp
Out[129]: DatetimeIndex(['2017-01-11', '2017-06-01'], dtype='datetime64[ns]', freq=None)

In [130]: (per.start_time <= tstamp) & (tstamp <= per.end_time)
Out[130]: array([ True, False], dtype=bool)

【讨论】:

    猜你喜欢
    • 2017-02-23
    • 1970-01-01
    • 2018-08-15
    • 1970-01-01
    • 2019-06-16
    • 2021-05-08
    • 1970-01-01
    相关资源
    最近更新 更多