From 7752a20c32d3a55c688745764d371ea97bc3b4d0 Mon Sep 17 00:00:00 2001 From: Trevor Bergeron Date: Mon, 2 Oct 2023 22:59:58 +0000 Subject: [PATCH 1/2] feat: add aliases for several series properties --- bigframes/series.py | 15 ++++++++++ .../bigframes_vendored/pandas/core/series.py | 30 +++++++++---------- 2 files changed, 29 insertions(+), 16 deletions(-) diff --git a/bigframes/series.py b/bigframes/series.py index 47298d59f5..37d0adb759 100644 --- a/bigframes/series.py +++ b/bigframes/series.py @@ -98,6 +98,10 @@ def shape(self) -> typing.Tuple[int]: def size(self) -> int: return self.shape[0] + @property + def ndim(self) -> int: + return 1 + @property def empty(self) -> bool: return self.shape[0] == 0 @@ -118,6 +122,13 @@ def query_job(self) -> Optional[bigquery.QueryJob]: self._set_internal_query_job(self._compute_dry_run()) return self._query_job + @property + def T(self) -> Series: + return self.transpose() + + def transpose(self) -> Series: + return self + def _set_internal_query_job(self, query_job: bigquery.QueryJob): self._query_job = query_job @@ -357,6 +368,8 @@ def ffill(self, *, limit: typing.Optional[int] = None) -> Series: window = bigframes.core.WindowSpec(preceding=limit, following=0) return self._apply_window_op(agg_ops.LastNonNullOp(), window) + pad = ffill + def bfill(self, *, limit: typing.Optional[int] = None) -> Series: window = bigframes.core.WindowSpec(preceding=0, following=limit) return self._apply_window_op(agg_ops.FirstNonNullOp(), window) @@ -738,6 +751,8 @@ def agg(self, func: str | typing.Sequence[str]) -> scalars.Scalar | Series: agg_ops.lookup_agg_func(typing.cast(str, func)) ) + aggregate = agg + def skew(self): count = self.count() if count < 3: diff --git a/third_party/bigframes_vendored/pandas/core/series.py b/third_party/bigframes_vendored/pandas/core/series.py index d58c1ccc3b..b0c61612a8 100644 --- a/third_party/bigframes_vendored/pandas/core/series.py +++ b/third_party/bigframes_vendored/pandas/core/series.py @@ -8,7 +8,6 @@ import numpy as np from pandas._libs import lib from pandas._typing import Axis, FilePath, NaPosition, WriteBuffer -import pandas.io.formats.format as fmt from bigframes import constants from third_party.bigframes_vendored.pandas.core.generic import NDFrame @@ -65,6 +64,20 @@ def name(self) -> Hashable: """ raise NotImplementedError(constants.ABSTRACT_METHOD_ERROR_MESSAGE) + @property + def T(self) -> Series: + """Return the transpose, which is by definition self.""" + raise NotImplementedError(constants.ABSTRACT_METHOD_ERROR_MESSAGE) + + def transpose(self) -> Series: + """ + Return the transpose, which is by definition self. + + Returns: + Series + """ + raise NotImplementedError(constants.ABSTRACT_METHOD_ERROR_MESSAGE) + def reset_index( self, *, @@ -151,21 +164,6 @@ def to_string( str or None: String representation of Series if ``buf=None``, otherwise None. """ - formatter = fmt.SeriesFormatter( - self, - name=name, - length=length, - header=header, - index=index, - dtype=dtype, - na_rep=na_rep, - float_format=float_format, - min_rows=min_rows, - max_rows=max_rows, - ) - result = formatter.to_string() - - # catch contract violations raise NotImplementedError(constants.ABSTRACT_METHOD_ERROR_MESSAGE) def to_markdown( From 8a03b8459d5f37198eb7db13dd769a9770246581 Mon Sep 17 00:00:00 2001 From: Trevor Bergeron Date: Wed, 4 Oct 2023 15:45:42 +0000 Subject: [PATCH 2/2] fix merge mistake --- bigframes/series.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/bigframes/series.py b/bigframes/series.py index 26adfb71ca..2a0b1ff1fa 100644 --- a/bigframes/series.py +++ b/bigframes/series.py @@ -123,6 +123,10 @@ def query_job(self) -> Optional[bigquery.QueryJob]: self._set_internal_query_job(self._compute_dry_run()) return self._query_job + @property + def struct(self) -> structs.StructAccessor: + return structs.StructAccessor(self._block) + @property def T(self) -> Series: return self.transpose() @@ -130,9 +134,6 @@ def T(self) -> Series: def transpose(self) -> Series: return self - def struct(self) -> structs.StructAccessor: - return structs.StructAccessor(self._block) - def _set_internal_query_job(self, query_job: bigquery.QueryJob): self._query_job = query_job