Python中对比DataFrame日期生成新列时np.where报错如何解决?
错误原因
报错是运算符优先级导致的:Python 中&按位与运算符的优先级高于==比较运算符,你原有代码的执行顺序会先计算'FALSE'& (final['Expiration_date'] >= final['current_date']),强制字符串和布尔数组做逻辑运算,因此触发类型错误。
正确实现代码
首先确保已导入numpy依赖:
import numpy as np
修改后的代码如下:
final['XYZ'] = np.where( (final['is_trial_period'] == 'FALSE') & (final['Expiration_date'] >= final['current_date']), 'Active Subscription', 'Expired Subscription' )
核心改动是给两个独立判断条件都加上括号,确保先完成两个条件的判断,再做逻辑与运算,完全匹配你的规则:
- 同时满足
is_trial_period为FALSE、Expiration_date大于等于current_date,赋值为Active Subscription - 其余所有情况均赋值为
Expired Subscription
小提示:如果后续你将
is_trial_period字段转换为布尔类型,只需把对应条件改为(~final['is_trial_period'])即可,不需要再判断字符串。
结果验证
你提供的样例数据中Expiration_date为2013-12-12,远早于current_date的2021-10-05,第二个判断条件不满足,最终XYZ列的输出和你预期的Expired Subscription完全一致。
内容的提问来源于stack exchange,提问作者Saideep
相关产品推荐
相关产品推荐

