Skip to content

Commit d80c313

Browse files
committed
BUG: Reverse operators on integer-NA series and numpy scalars resulting in object dtype (pandas-dev#22024)
1 parent 513c02c commit d80c313

File tree

1 file changed

+12
-2
lines changed

1 file changed

+12
-2
lines changed

pandas/core/ops.py

+12-2
Original file line numberDiff line numberDiff line change
@@ -1139,21 +1139,26 @@ def dispatch_to_extension_op(op, left, right):
11391139
# we need to listify to avoid ndarray, or non-same-type extension array
11401140
# dispatching
11411141

1142+
new_type = left_type = right_type = None
11421143
if is_extension_array_dtype(left):
11431144

1145+
left_type = left.dtype.type
11441146
new_left = left.values
11451147
if isinstance(right, np.ndarray):
11461148

11471149
# handle numpy scalars, this is a PITA
11481150
# TODO(jreback)
11491151
new_right = lib.item_from_zerodim(right)
1152+
right_type = new_right.dtype
11501153
if is_scalar(new_right):
11511154
new_right = [new_right]
11521155
new_right = list(new_right)
11531156
elif is_extension_array_dtype(right) and type(left) != type(right):
1157+
right_type = new_right.dtype.type
11541158
new_right = list(new_right)
11551159
else:
11561160
new_right = right
1161+
right_type = type(right)
11571162

11581163
else:
11591164

@@ -1162,12 +1167,17 @@ def dispatch_to_extension_op(op, left, right):
11621167

11631168
res_values = op(new_left, new_right)
11641169
res_name = get_op_result_name(left, right)
1165-
1170+
if right_type and left_type:
1171+
new_type = find_common_type([right_type, left_type])
11661172
if op.__name__ == 'divmod':
11671173
return _construct_divmod_result(
11681174
left, res_values, left.index, res_name)
11691175

1170-
return _construct_result(left, res_values, left.index, res_name)
1176+
result = _construct_result(left, res_values, left.index, res_name)
1177+
if is_object_dtype(result.dtype):
1178+
result = _construct_result(left, res_values, left.index, res_name,
1179+
new_type)
1180+
return result
11711181

11721182

11731183
def _arith_method_SERIES(cls, op, special):

0 commit comments

Comments
 (0)