遍历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)
运行后得到的结果
| Customer | Date | Status | |
|---|---|---|---|
| 0 | Jay | 2018-04-16 | OK |
| 1 | Anthony | 2018-04-10 | Late |
| 2 | Anne | 2018-05-01 | OK |
如果你的截止日期不是2018-04-15,只需要修改cutoff_date的年、月、日参数就行啦。
内容的提问来源于stack exchange,提问作者user1922364
相关产品推荐
相关产品推荐

