You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

遍历DataFrame并检查日期:生成订单状态列时遇报错求助

订单逾期标记代码的错误排查与修复

咱们来一步步拆解你代码里的问题,帮你搞定这个需求:

1. 语法错误:if语句漏掉了冒号

Python里所有条件判断、循环语句的结尾必须加冒号:,你写的if x < dt.datetime.today()这一行没加,直接会触发语法错误,导致代码跑不起来。这是最基础的Python语法要求哦。

2. 返回值大小写和预期不匹配

你想要的Status列是OK/Late/Ok,但你的函数返回的是全小写的late/ok,这样结果和预期的格式就对不上了。

3. 潜在的模块导入问题

代码里用了dt.datetime.today(),但如果没提前导入datetime模块并取别名dt,会触发NameError,所以一定要在代码开头加上导入语句。

4. 逻辑错误:判断基准不对

看你的预期结果,Jay(2018-04-16)和Anne(2018-05-01)都是OK,只有Anthony(2018-04-10)是Late。但如果用当前日期dt.datetime.today()来判断,现在的时间肯定远晚于2018年,所有订单都会被标记成Late,完全不符合你的预期。这说明你应该用固定的截止日期来判断,而不是当前日期。


修正后的完整代码

假设你的截止日期是2018-04-15(刚好能匹配你的预期结果),代码如下:

import datetime as dt
import pandas as pd

# 构建你的DataFrame(如果已经有了可以跳过这部分)
data = {
    'Customer': ['Jay', 'Anthony', 'Anne'],
    'Date': ['2018-04-16', '2018-04-10', '2018-05-01']
}
df = pd.DataFrame(data)
# 转换Date列为datetime格式(你已经完成这步,可保留或跳过)
df['Date'] = pd.to_datetime(df['Date'])

def Status(x):
    # 设定固定的截止日期,根据你的需求调整
    cutoff_date = dt.datetime(2018, 4, 15)
    if x < cutoff_date:
        return 'Late'
    else:
        return 'OK'

df['Status'] = df['Date'].apply(Status)

运行后得到的结果

CustomerDateStatus
0Jay2018-04-16OK
1Anthony2018-04-10Late
2Anne2018-05-01OK

如果你的截止日期不是2018-04-15,只需要修改cutoff_date的年、月、日参数就行啦。

内容的提问来源于stack exchange,提问作者user1922364

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 03:33:49