@@ -2368,6 +2368,31 @@ def check(series, other, check_reverse=False):
2368
2368
check (self .ts , 5 , check_reverse = True )
2369
2369
check (tm .makeFloatSeries (), tm .makeFloatSeries (), check_reverse = True )
2370
2370
2371
+ def test_bool_op (self ): # GH6528 & GH8151
2372
+ u = pd .Series ([nan , nan , nan , False , False , True , True ])
2373
+ v = pd .Series ([nan , False , True , False , True , False , True ])
2374
+
2375
+ for a , b in [[u , v ], [v , u ]]:
2376
+ # against numpy logical casted to bool
2377
+ assert_series_equal (a | b , Series (np .logical_or (a , b ), dtype = 'bool' ))
2378
+ assert_series_equal (a & b , Series (np .logical_and (a , b ), dtype = 'bool' ))
2379
+ assert_series_equal (a ^ b , # np.logical_xor throws with floats!
2380
+ Series (np .logical_xor (a .values .astype (bool ),
2381
+ b .values .astype (bool ))))
2382
+
2383
+ assert_series_equal (~ a .astype (bool ),
2384
+ Series (np .logical_not (a ), dtype = 'bool' ))
2385
+
2386
+ # type cast semantics
2387
+ assert_series_equal (a | b , a .astype (bool ) | b .astype (bool ))
2388
+ assert_series_equal (a & b , a .astype (bool ) & b .astype (bool ))
2389
+ assert_series_equal (a ^ b , a .astype (bool ) ^ b .astype (bool ))
2390
+
2391
+ # symmetry
2392
+ assert_series_equal (a & b , b & a )
2393
+ assert_series_equal (a | b , b | a )
2394
+ assert_series_equal (a ^ b , b ^ a )
2395
+
2371
2396
def test_neg (self ):
2372
2397
assert_series_equal (- self .series , - 1 * self .series )
2373
2398
@@ -3418,7 +3443,7 @@ def test_comparison_label_based(self):
3418
3443
3419
3444
# identity
3420
3445
# we would like s[s|e] == s to hold for any e, whether empty or not
3421
- for e in [Series ([]),Series ([1 ],['z' ]),Series (['z' ]),Series (np . nan ,b .index ),Series (np . nan ,a .index )]:
3446
+ for e in [Series ([]),Series ([1 ],['z' ]),Series (['z' ]),Series (False ,b .index ),Series (False ,a .index )]:
3422
3447
result = a [a | e ]
3423
3448
assert_series_equal (result ,a [a ])
3424
3449
@@ -6144,4 +6169,3 @@ def test_unique_data_ownership(self):
6144
6169
if __name__ == '__main__' :
6145
6170
nose .runmodule (argv = [__file__ , '-vvs' , '-x' , '--pdb' , '--pdb-failure' ],
6146
6171
exit = False )
6147
-
0 commit comments