【问题标题】:How can I increment a date in datetime64[ns] format by 6 calendar months?如何将 datetime64[ns] 格式的日期增加 6 个日历月?
【发布时间】:2020-12-09 15:01:35
【问题描述】:

我从来没有意识到在 Python 中增加一个简单的日期会是一个如此难以克服的挑战,但是在这个论坛上尝试和搜索了 2 小时后我放弃了。我有一个包含effective_date 列的数据框,其中包含2019-01-02 和数据类型datetime64[ns] 之类的条目。

我试过了:

data['effective_date'] = pd.to_datetime(data['effective_date'].values)
data['six_mth_interval'] = data['effective_date'].apply(lambda x: x['effective_date'].values + relativedelta(months=6))

...但我收到以下错误:

<ipython-input-315-b81c59eb6b0d> in <lambda>(x)
----> 1 data['six_mth_interval'] = data['effective_date'].apply(lambda x: x['effective_date'] + relativedelta(months=6))

TypeError: 'Timestamp' object is not subscriptable

现有的关于 S/O 的文章没有帮助。

【问题讨论】:

    标签: pandas datetime increment strptime


    【解决方案1】:

    运行:

    data['six_mth_interval'] = data.effective_date + pd.DateOffset(months=6)
    

    以 DataFrame 为例,结果为:

       effective_date six_mth_interval
    0      2019-08-01       2020-02-01
    1      2019-08-02       2020-02-02
    2      2019-08-25       2020-02-25
    3      2019-08-26       2020-02-26
    4      2019-08-27       2020-02-27
    5      2019-08-28       2020-02-28
    6      2019-08-29       2020-02-29
    7      2019-08-30       2020-02-29
    8      2019-08-31       2020-02-29
    9      2019-09-01       2020-03-01
    10     2019-09-02       2020-03-02
    

    您的代码失败,因为当您将函数应用于 系列 (DataFrame 的一列),那么参数是每个 single 这个系列的元素。

    所以你可以写:

    data['six_mth_interval'] = data['effective_date'].apply(
        lambda x: x + pd.DateOffset(months=6))
    

    但我的代码更快。

    【讨论】:

    • 非常感谢 - 非常感谢!不敢相信我花了这么长时间才弄明白,但我会记得前进..
    猜你喜欢
    • 1970-01-01
    • 2011-02-21
    • 1970-01-01
    • 2021-10-01
    • 1970-01-01
    • 2015-04-29
    • 2019-07-30
    • 2011-09-01
    相关资源
    最近更新 更多