Skip to content

Commit e7cb6b3

Browse files
jbrockmendeljreback
authored andcommitted
REF/TST: Corner cases for op(DataFrame, Series) (#28600)
1 parent 4a0f74f commit e7cb6b3

File tree

2 files changed

+33
-11
lines changed

2 files changed

+33
-11
lines changed

pandas/core/ops/__init__.py

+2-11
Original file line numberDiff line numberDiff line change
@@ -753,18 +753,9 @@ def _combine_series_frame(self, other, func, fill_value=None, axis=None, level=N
753753
return self._combine_match_index(other, func, level=level)
754754
else:
755755
return self._combine_match_columns(other, func, level=level)
756-
else:
757-
if not len(other):
758-
return self * np.nan
759-
760-
if not len(self):
761-
# Ambiguous case, use _series so works with DataFrame
762-
return self._constructor(
763-
data=self._series, index=self.index, columns=self.columns
764-
)
765756

766-
# default axis is columns
767-
return self._combine_match_columns(other, func, level=level)
757+
# default axis is columns
758+
return self._combine_match_columns(other, func, level=level)
768759

769760

770761
def _align_method_FRAME(left, right, axis):

pandas/tests/frame/test_arithmetic.py

+31
Original file line numberDiff line numberDiff line change
@@ -688,3 +688,34 @@ def test_operations_with_interval_categories_index(self, all_arithmetic_operator
688688
result = getattr(df, op)(num)
689689
expected = pd.DataFrame([[getattr(n, op)(num) for n in data]], columns=ind)
690690
tm.assert_frame_equal(result, expected)
691+
692+
693+
def test_frame_with_zero_len_series_corner_cases():
694+
# GH#28600
695+
# easy all-float case
696+
df = pd.DataFrame(np.random.randn(6).reshape(3, 2), columns=["A", "B"])
697+
ser = pd.Series(dtype=np.float64)
698+
699+
result = df + ser
700+
expected = pd.DataFrame(df.values * np.nan, columns=df.columns)
701+
tm.assert_frame_equal(result, expected)
702+
703+
result = df == ser
704+
expected = pd.DataFrame(False, index=df.index, columns=df.columns)
705+
tm.assert_frame_equal(result, expected)
706+
707+
# non-float case should not raise on comparison
708+
df2 = pd.DataFrame(df.values.view("M8[ns]"), columns=df.columns)
709+
result = df2 == ser
710+
expected = pd.DataFrame(False, index=df.index, columns=df.columns)
711+
tm.assert_frame_equal(result, expected)
712+
713+
714+
def test_zero_len_frame_with_series_corner_cases():
715+
# GH#28600
716+
df = pd.DataFrame(columns=["A", "B"], dtype=np.float64)
717+
ser = pd.Series([1, 2], index=["A", "B"])
718+
719+
result = df + ser
720+
expected = df
721+
tm.assert_frame_equal(result, expected)

0 commit comments

Comments
 (0)