Skip to content

Commit 6aa6218

Browse files
committed
rewrite to preserve types
1 parent 5018365 commit 6aa6218

File tree

2 files changed

+15
-20
lines changed

2 files changed

+15
-20
lines changed

pandas/core/frame.py

+5-10
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,6 @@
101101
is_integer_dtype,
102102
is_iterator,
103103
is_list_like,
104-
is_object_dtype,
105104
is_scalar,
106105
is_sequence,
107106
needs_i8_conversion,
@@ -5204,17 +5203,13 @@ def lookup(self, row_labels, col_labels) -> ExtensionArray | np.ndarray:
52045203
raise KeyError("One or more column labels was not found")
52055204

52065205
sub = self.take(np.unique(cidx), axis=1)
5207-
if sub._is_mixed_type:
5208-
sub = sub.take(np.unique(ridx), axis=0)
5209-
ridx = sub.index.get_indexer(row_labels)
5210-
values = sub.values
5206+
sub = sub.take(np.unique(ridx), axis=0)
5207+
ridx = sub.index.get_indexer(row_labels)
5208+
values = sub.melt()["value"]
52115209
cidx = sub.columns.get_indexer(col_labels)
5212-
flat_index = ridx * len(sub.columns) + cidx
5210+
flat_index = ridx + cidx * len(sub)
52135211

5214-
result = values.flat[flat_index]
5215-
5216-
if is_object_dtype(result):
5217-
result = lib.maybe_convert_objects(result)
5212+
result = values[flat_index]
52185213

52195214
return result
52205215

pandas/tests/frame/indexing/test_indexing.py

+10-10
Original file line numberDiff line numberDiff line change
@@ -1420,19 +1420,17 @@ def test_lookup_float(self, float_frame):
14201420
cols = list(df.columns) * len(df.index)
14211421
result = df.lookup(rows, cols)
14221422

1423-
expected = np.array([df.loc[r, c] for r, c in zip(rows, cols)])
1424-
tm.assert_numpy_array_equal(result, expected)
1423+
expected = Series([df.loc[r, c] for r, c in zip(rows, cols)])
1424+
tm.assert_series_equal(result, expected, check_index=False, check_names=False)
14251425

14261426
def test_lookup_mixed(self, float_string_frame):
14271427
df = float_string_frame
14281428
rows = list(df.index) * len(df.columns)
14291429
cols = list(df.columns) * len(df.index)
14301430
result = df.lookup(rows, cols)
14311431

1432-
expected = np.array(
1433-
[df.loc[r, c] for r, c in zip(rows, cols)], dtype=np.object_
1434-
)
1435-
tm.assert_almost_equal(result, expected)
1432+
expected = Series([df.loc[r, c] for r, c in zip(rows, cols)], dtype=np.object_)
1433+
tm.assert_series_equal(result, expected, check_index=False, check_names=False)
14361434

14371435
def test_lookup_bool(self):
14381436
df = DataFrame(
@@ -1443,14 +1441,16 @@ def test_lookup_bool(self):
14431441
"mask_c": [False, True, False, True],
14441442
}
14451443
)
1446-
df["mask"] = df.lookup(df.index, "mask_" + df["label"])
1444+
df_mask = df.lookup(df.index, "mask_" + df["label"])
14471445

1448-
exp_mask = np.array(
1446+
exp_mask = Series(
14491447
[df.loc[r, c] for r, c in zip(df.index, "mask_" + df["label"])]
14501448
)
14511449

1452-
tm.assert_series_equal(df["mask"], Series(exp_mask, name="mask"))
1453-
assert df["mask"].dtype == np.bool_
1450+
tm.assert_series_equal(
1451+
df_mask, Series(exp_mask, name="mask"), check_index=False, check_names=False
1452+
)
1453+
assert df_mask.dtype == np.bool_
14541454

14551455
def test_lookup_raises(self, float_frame):
14561456
with pytest.raises(KeyError, match="'One or more row labels was not found'"):

0 commit comments

Comments
 (0)