Skip to content

Commit 9c61352

Browse files
committed
solving issue#34125, now the isin function is more consistent when comparing a int df with a string value on isin comparation
1 parent 1ce9f0c commit 9c61352

File tree

2 files changed

+22
-1
lines changed

2 files changed

+22
-1
lines changed

pandas/core/algorithms.py

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -428,8 +428,14 @@ def isin(comps: AnyArrayLike, values: AnyArrayLike) -> np.ndarray:
428428
# TODO(extension)
429429
# handle categoricals
430430
return comps.isin(values) # type: ignore
431+
try:
432+
if comps.dtype.name == 'int64':
433+
comps, dtype = _ensure_data(comps, dtype=object)
434+
else:
435+
comps, dtype = _ensure_data(comps)
436+
except:
437+
comps, dtype = _ensure_data(comps)
431438

432-
comps, dtype = _ensure_data(comps)
433439
values, _ = _ensure_data(values, dtype=dtype)
434440

435441
# faster for larger cases to use np.in1d
@@ -2084,3 +2090,4 @@ def sort_mixed(values):
20842090
np.putmask(new_codes, mask, na_sentinel)
20852091

20862092
return ordered, ensure_platform_int(new_codes)
2093+

pandas/tests/frame/methods/test_isin.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -189,3 +189,17 @@ def test_isin_empty_datetimelike(self):
189189
tm.assert_frame_equal(result, expected)
190190
result = df1_td.isin(df3)
191191
tm.assert_frame_equal(result, expected)
192+
193+
def test_isin_int_df_string_search(self):
194+
#Comparing df with int`s with a string at isin() -> should not match values
195+
df = pd.DataFrame({"values": [1,2]})
196+
result = df.isin(["1"])
197+
expected_false = pd.DataFrame({"values": [False, False]})
198+
tm.assert_frame_equal(result, expected_false)
199+
200+
#Comparing df with int`s with a int at isin() -> should find the value
201+
result = df.isin([1])
202+
expected_true = pd.DataFrame({"values": [True, False]})
203+
tm.assert_frame_equal(result, expected_true)
204+
205+

0 commit comments

Comments
 (0)