我可能误解了这是怎么回事。 我很惊讶,考虑到这个数据帧:
A B C D
0 9.0 Nonnumeric 9.0
2 9.0 Num0a 9.0
这看起来确实短路了(-GOOD!)地址:
dfzero["B"] = pd.DataFrame.where(
cond = dfzero["A"] != 0,
self = 1/dfzero["A"],
other = 0)
但这并不坏: (由于没有短路,因此给出了除零误差):
df["D"] = pd.DataFrame.where(
cond = df["C"].str.len() == 5,
self = df["C"].str[-2:].apply(lambda x: int(x, 16)),
other = 0)
错误是:
self = (df["C"].str[-2:].apply(lambda x: int(x, 16))),
ValueError: invalid literal for int() with base 16: 'ic'
不,即使第一种方法也不会短路。在计算结果之前,必须首先计算这两个操作数。意思是,这是计算出来的
这也是:
表达式实际上是:
第二次也是这样。这种行为是一贯的。你知道吗
你在期待一个
ZeroDivisionError
吗?你不会在numpy或pandas中得到,因为这些库假设你在计算这些量时知道自己在做什么。你知道吗这里的选项是预计算掩码,然后只计算这些行的结果。你知道吗
如果您想填写nan,请使用
df.loc[~m, 'D'] = fill_value
。你知道吗相关问题 更多 >
编程相关推荐