@@ -506,30 +506,6 @@ def isin(comps: ListLike, values: ListLike) -> npt.NDArray[np.bool_]:
506
506
orig_values = list (values )
507
507
values = _ensure_arraylike (orig_values , func_name = "isin-targets" )
508
508
509
- try :
510
- src = comps .dtype # type: ignore[union-attr]
511
- tar = values .dtype
512
- # check only valid dtypes related to implicit conversion to float64
513
- # other data types derived from 64-bit integers such as U/Int64Dtype
514
- # should also work
515
- if (
516
- src .kind in "iu"
517
- and src .itemsize == 8 # type: ignore[union-attr]
518
- and tar .kind in "iu"
519
- and tar .itemsize == 8 # type: ignore[union-attr]
520
- ):
521
- is_implicit_conversion_to_float64 = src != tar
522
- else :
523
- is_implicit_conversion_to_float64 = False
524
- except (TypeError , AttributeError , ImportError ):
525
- # invalid comparison
526
- is_implicit_conversion_to_float64 = False
527
-
528
- if is_implicit_conversion_to_float64 :
529
- # GH#46485 Use object to avoid upcast to float64 later
530
- # TODO: Share with _find_common_type_compat
531
- values = construct_1d_object_array_from_listlike (orig_values )
532
-
533
509
elif isinstance (values , ABCMultiIndex ):
534
510
# Avoid raising in extract_array
535
511
values = np .array (values )
@@ -581,6 +557,16 @@ def f(c, v):
581
557
582
558
else :
583
559
common = np_find_common_type (values .dtype , comps_array .dtype )
560
+ if (
561
+ values .dtype .kind in "iu"
562
+ and comps_array .dtype .kind in "iu"
563
+ and common == np .float64
564
+ ):
565
+ # GH#46485
566
+ # Let's np_find_common_type do the job and return float64
567
+ # when it cannot do otherwise with integers
568
+ # We replace it by an object
569
+ common = np .dtype ("O" )
584
570
values = values .astype (common , copy = False )
585
571
comps_array = comps_array .astype (common , copy = False )
586
572
f = htable .ismember
0 commit comments