From 6c2f9a2ed2169389e96c1fda6889409655d8850f Mon Sep 17 00:00:00 2001 From: Seth Michael Larson Date: Mon, 13 Jul 2020 17:30:14 -0500 Subject: [PATCH] Add DataFrame.size and Series.size --- docs/source/reference/supported_apis.rst | 4 ++-- eland/ndframe.py | 26 ++++++++++++++++++++++ eland/tests/dataframe/test_shape_pytest.py | 7 ++++++ 3 files changed, 35 insertions(+), 2 deletions(-) diff --git a/docs/source/reference/supported_apis.rst b/docs/source/reference/supported_apis.rst index 7594c41..8a1f3f2 100644 --- a/docs/source/reference/supported_apis.rst +++ b/docs/source/reference/supported_apis.rst @@ -338,7 +338,7 @@ script instead of being modified manually. +---------------------------------------+------------+ | ``ed.DataFrame.shift()`` | No | +---------------------------------------+------------+ -| ``ed.DataFrame.size`` | No | +| ``ed.DataFrame.size`` | **Yes** | +---------------------------------------+------------+ | ``ed.DataFrame.skew()`` | No | +---------------------------------------+------------+ @@ -910,7 +910,7 @@ script instead of being modified manually. +---------------------------------------+------------+ | ``ed.Series.shift()`` | No | +---------------------------------------+------------+ -| ``ed.Series.size`` | No | +| ``ed.Series.size`` | **Yes** | +---------------------------------------+------------+ | ``ed.Series.skew()`` | No | +---------------------------------------+------------+ diff --git a/eland/ndframe.py b/eland/ndframe.py index 3f59910..b3c2a96 100644 --- a/eland/ndframe.py +++ b/eland/ndframe.py @@ -17,6 +17,7 @@ import sys from abc import ABC, abstractmethod +from typing import Tuple from eland.query_compiler import QueryCompiler @@ -505,3 +506,28 @@ class NDFrame(ABC): @abstractmethod def sample(self, n=None, frac=None, random_state=None): pass + + @property + def shape(self) -> Tuple[int, ...]: + raise NotImplementedError + + @property + def size(self) -> int: + """ + Return an int representing the number of elements in this object. + + Return the number of rows if Series. Otherwise return the number of rows times number of columns if DataFrame. + + Returns + ------- + int: + Number of elements in the object + + See Also + -------- + :pandas_api_docs:`pandas.DataFrame.size` + """ + product = 0 + for dim in self.shape: + product = (product or 1) * dim + return product diff --git a/eland/tests/dataframe/test_shape_pytest.py b/eland/tests/dataframe/test_shape_pytest.py index 3af2d4a..202f281 100644 --- a/eland/tests/dataframe/test_shape_pytest.py +++ b/eland/tests/dataframe/test_shape_pytest.py @@ -38,3 +38,10 @@ class TestDataFrameShape(TestData): ed_shape = ed_flights.shape assert pd_shape == ed_shape + + def test_size(self): + pd_flights = self.pd_flights() + ed_flights = self.ed_flights() + + assert pd_flights.size == ed_flights.size + assert pd_flights.FlightDelayMin.size == ed_flights.FlightDelayMin.size