我有一个 Pandas 系列:
2013-09-30 None
2013-10-31 None
2013-11-30 1.47701e+06
2013-12-31 1.47701e+06
2014-01-31 1.47701e+06
Freq: M, Name: test_series, dtype: object
如果我这样做:
pd.notnull(test_series) & np.sign(test_series) == 1
为什么我会收到错误:
*** TypeError: unorderable types: NoneType() < int()
为什么第一个不检查 notnull
短路,当 Series 元素为 None 时,第二次检查根本没有完成?
最佳答案
我认为不是,因为 &
、|
可与 booelan Series
配合使用。
因此,它通过运算符 &
按元素将第一个条件中的一个 mask
与另一个 mask
结合起来。
#convert to numeric, if not possible get NaN
test_series = pd.to_numeric(test_series, errors='coerce')
mask1 = pd.notnull(test_series)
mask2 = np.sign(test_series) == 1
print (mask1)
2013-09-30 False
2013-10-31 False
2013-11-30 True
2013-12-31 True
2014-01-31 True
Name: test_series, dtype: bool
print (mask2)
2013-09-30 False
2013-10-31 False
2013-11-30 True
2013-12-31 True
2014-01-31 True
Name: test_series, dtype: bool
print (mask1 & mask2)
2013-09-30 False
2013-10-31 False
2013-11-30 True
2013-12-31 True
2014-01-31 True
Name: test_series, dtype: bool
关于python - 将 bool 检查与 & 结合起来不会 "short-circuts"吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41208832/