将布尔检查与&结合使用不是“短圈子”?

时间:2016-12-18 13:34:09

标签: python 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短曲线并且第二次检查完全没有完成?

1 个答案:

答案 0 :(得分:2)

我认为不是,因为&|适用于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