Pandas DataFrame中Series真值歧义错误及数值替换问题求助
问题解决方案
错误原因
你的代码中逻辑运算符&的优先级高于比较运算符,导致Pandas无法正确解析布尔条件组合,进而引发"The truth value of a Series is ambiguous"错误。必须为每个独立的布尔判断条件单独添加括号。
修正后的完整代码
假设你需要实现:
- 当
remaining_lease为1000且lease_commence_date≥2000时,替换为99-(year-sales.lease_commence_date) - 当
remaining_lease为1000且lease_commence_date<2000时,替换为指定的另一数值(示例用100-(year-sales.lease_commence_date),可自行修改)
import datetime # 获取当前年份 year = datetime.datetime.now().year # 处理租赁起始年份≥2000的情况 sales.loc[(sales.remaining_lease == 1000) & (sales.lease_commence_date >= 2000), 'remaining_lease'] = 99 - (year - sales.lease_commence_date) # 处理租赁起始年份<2000的情况 sales.loc[(sales.remaining_lease == 1000) & (sales.lease_commence_date < 2000), 'remaining_lease'] = 100 - (year - sales.lease_commence_date) # 替换为你需要的目标数值
额外说明
如果lease_commence_date是日期类型而非纯年份数值,需要先提取年份再做判断,代码调整为:
# 提取年份后处理≥2000的情况 sales.loc[(sales.remaining_lease == 1000) & (sales.lease_commence_date.dt.year >= 2000), 'remaining_lease'] = 99 - (year - sales.lease_commence_date.dt.year) # 提取年份后处理<2000的情况 sales.loc[(sales.remaining_lease == 1000) & (sales.lease_commence_date.dt.year < 2000), 'remaining_lease'] = 100 - (year - sales.lease_commence_date.dt.year)
内容的提问来源于stack exchange,提问作者Beginner_coder
相关产品推荐
相关产品推荐

