diff --git a/.gitignore b/.gitignore index d951f3fb9cbad..2ddd0b1403069 100644 --- a/.gitignore +++ b/.gitignore @@ -141,3 +141,4 @@ doc/source/savefig/ # Pyodide/WASM related files # ############################## /.pyodide-xbuildenv-* +venv/ diff --git a/pandas/core/frame.py b/pandas/core/frame.py index 91f5cd1679a61..22f77e3cca136 100644 --- a/pandas/core/frame.py +++ b/pandas/core/frame.py @@ -10503,6 +10503,13 @@ def aggregate(self, func=None, axis: Axis = 0, *args, **kwargs): from pandas.core.apply import frame_apply axis = self._get_axis_number(axis) + if self.empty and callable(func): + if axis == 1: + return Series([None] * len(self.index), index=self.index, dtype=object) + else: + return Series( + [None] * len(self.columns), index=self.columns, dtype=object + ) op = frame_apply(self, func=func, axis=axis, args=args, kwargs=kwargs) result = op.agg() diff --git a/pandas/tests/frame/methods/test_aggregate.py b/pandas/tests/frame/methods/test_aggregate.py new file mode 100644 index 0000000000000..95a01dd102cf6 --- /dev/null +++ b/pandas/tests/frame/methods/test_aggregate.py @@ -0,0 +1,12 @@ +import pandas as pd +import pandas._testing as tm + + +def test_aggregate_empty_dataframe_returns_series(): + df = pd.DataFrame({"A": [], "B": []}) + result_row = df.aggregate(".".join, axis="columns") + expected_row = pd.Series([None] * len(df.index), index=df.index, dtype=object) + tm.assert_series_equal(result_row, expected_row) + result_col = df.aggregate(".".join, axis="index") + expected_col = pd.Series([None] * len(df.columns), index=df.columns, dtype=object) + tm.assert_series_equal(result_col, expected_col)