pandas 在Python中,与时间增量相关的ceil(“1d”)是什么

jq6vz3qz  于 2022-12-02  发布在  Python
关注(0)|答案(1)|浏览(142)

我有一个我曾经遇到过的函数:

def sub_kpi1_rule(sub_comp_appr_date, date_report_run, greater_of_date_sub_sub_ll):
        if pd.isnull(sub_comp_appr_date) and not alive_for_six_days(date_report_run, greater_of_date_sub_sub_ll):
            return "NA"
        elif (sub_comp_appr_date - greater_of_date_sub_sub_ll).ceil("1d").days <= 6:
            return "PASS"
        else:
            return "FAIL"

所有的参数都是日期类型,所以我假设:

(sub_comp_appr_date - greater_of_date_sub_sub_ll)

...返回一个timedelta示例。我对此ceil(语法)感到困惑

elif (sub_comp_appr_date - greater_of_date_sub_sub_ll).ceil("1d").days <= 6:

因为如果我尝试减去两个日期并使用这个函数,我会得到一个错误:

from datetime import date
a = date(2022, 10,1)
b = date(2022, 10,15)
(b-a).ceil("1d")

---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
Cell In [36], line 4
      2 a = date(2022, 10,1)
      3 b = date(2022, 10,15)
----> 4 (b-a).ceil("1d")

AttributeError: 'datetime.timedelta' object has no attribute 'ceil'

在 Dataframe 上调用该函数:

df["Sub KPI1"] = df.apply(lambda x: sub_kpi1_rule(x["SUBM_LATE_DESTINATION_COMPLIANCE_APPROVAL_DATE"], date_report_run, x["Greater of Date Submitted and Submission LL Created"]), axis=1)

我认为类型是pd.timestamp,因为date_report_run被显式转换为一个:

date_report_run = date(year_report_run, month_report_run, day_report_run)
date_report_run = pd.Timestamp(date_report_run)

我猜我得到的是一个Pandas。_libs。tslibs。timedelta。Timedelta,而不是一个正常的timedelta。

mznpcxlj

mznpcxlj1#

你会得到一个错误,因为你在你的例子中对datetime.timedelta类使用了.ceil()。为此你需要pandas类。(pandas._libs.tslibs.timedeltas. Timedelta
delta = pd.Timedelta(4, "d")
现在,.ceil("1d")有什么作用?如果你有一个小时和分钟的增量,你想ceil它到天的值。例如:

date1 = pd.to_datetime(1490195805, unit='s')
date2 = pd.to_datetime(1490597688, unit='s')
date2 - date1

时间增量(“4天15:38:03”)

(date2 - date1).ceil("1d")

时间增量('5天00:00:00')

当小时数超过12h时,日期增量上限为5天。

相关问题