Skip to content

Commit dedfde1

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

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
@@ -1170,21 +1170,26 @@ def dispatch_to_extension_op(op, left, right):
11701170
# we need to listify to avoid ndarray, or non-same-type extension array
11711171
# dispatching
11721172

1173+
new_type = left_type = right_type = None
11731174
if is_extension_array_dtype(left):
11741175

1176+
left_type = left.dtype.type
11751177
new_left = left.values
11761178
if isinstance(right, np.ndarray):
11771179

11781180
# handle numpy scalars, this is a PITA
11791181
# TODO(jreback)
11801182
new_right = lib.item_from_zerodim(right)
1183+
right_type = new_right.dtype
11811184
if is_scalar(new_right):
11821185
new_right = [new_right]
11831186
new_right = list(new_right)
11841187
elif is_extension_array_dtype(right) and type(left) != type(right):
1188+
right_type = new_right.dtype.type
11851189
new_right = list(new_right)
11861190
else:
11871191
new_right = right
1192+
right_type = type(right)
11881193

11891194
else:
11901195

@@ -1193,12 +1198,17 @@ def dispatch_to_extension_op(op, left, right):
11931198

11941199
res_values = op(new_left, new_right)
11951200
res_name = get_op_result_name(left, right)
1196-
1201+
if right_type and left_type:
1202+
new_type = find_common_type([right_type, left_type])
11971203
if op.__name__ == 'divmod':
11981204
return _construct_divmod_result(
11991205
left, res_values, left.index, res_name)
12001206

1201-
return _construct_result(left, res_values, left.index, res_name)
1207+
result = _construct_result(left, res_values, left.index, res_name)
1208+
if is_object_dtype(result.dtype):
1209+
result = _construct_result(left, res_values, left.index, res_name,
1210+
new_type)
1211+
return result
12021212

12031213

12041214
def _arith_method_SERIES(cls, op, special):

0 commit comments

Comments
 (0)