【发布时间】:2021-09-10 22:59:05
【问题描述】:
我正在尝试使用 if 语句执行简单的 for 循环以获取非 NA 值,但是收到错误。你能帮忙吗?
df = pd.DataFrame({'Platform ID' : [1,2,3,4], "Delivery Date" : [str(2009), float("nan"), float("nan"), float("nan")],
"Build Year" : [float("nan"),str(2009),float("nan"), float("nan")],
"In Service Date" : [float("nan"),float("nan"), str("14-11-2009"), float("nan")]})
df.dtypes
df
def delivery_year(delivery_year, build_year, service_year):
out = []
for i in range(0,len(delivery_year)):
if any(delivery_year.notna()):
out[i].append(delivery_year)
if any(delivery_year[i].isna() and build_year[i].notna()):
out[i].append(build_year)
elif any(build_year[i].isna()):
out[i].append(service_year.str.strip().str[-4:])
else:
out[i].append(float("nan"))
return out
df["Delivery Year"] = delivery_year(df["Delivery Date"], df["Build Year"], df["In Service Date"])
错误信息:
ValueError:Series 的真值不明确。使用 a.empty、a.bool()、a.item()、a.any() 或 a.all()。
【问题讨论】:
-
你能分享你的错误信息吗? :)
-
ValueError: Series 的真值不明确。使用 a.empty、a.bool()、a.item()、a.any() 或 a.all()。
-
@JaroslavKotrba 逻辑和预期输出是什么?
-
我想获得一个新列,其中包含 Delivery Year,它由这些列组成,但是,有很多 Nans,所以逻辑是 for 循环遍历列并返回第一个非钠值。最好的情况是交付日期,如果不存在,则构建年份,如果甚至不存在,那么至少在机器投入使用时的服务日期。