diff --git a/asv_bench/benchmarks/frame_methods.py b/asv_bench/benchmarks/frame_methods.py index 4ff71c706cd34..12e4824b2dd2a 100644 --- a/asv_bench/benchmarks/frame_methods.py +++ b/asv_bench/benchmarks/frame_methods.py @@ -512,3 +512,21 @@ def time_nlargest(self, keep): def time_nsmallest(self, keep): self.df.nsmallest(100, 'A', keep=keep) + + +class Describe(object): + + goal_time = 0.2 + + def setup(self): + self.df = DataFrame({ + 'a': np.random.randint(0, 100, int(1e6)), + 'b': np.random.randint(0, 100, int(1e6)), + 'c': np.random.randint(0, 100, int(1e6)) + }) + + def time_series_describe(self): + self.df['a'].describe() + + def time_dataframe_describe(self): + self.df.describe() diff --git a/doc/source/whatsnew/v0.24.0.txt b/doc/source/whatsnew/v0.24.0.txt index 6cbc19cca99e1..c69de149a0f35 100644 --- a/doc/source/whatsnew/v0.24.0.txt +++ b/doc/source/whatsnew/v0.24.0.txt @@ -63,8 +63,7 @@ Removal of prior version deprecations/changes Performance Improvements ~~~~~~~~~~~~~~~~~~~~~~~~ -- -- +- Improved performance of :func:`Series.describe` in case of numeric dtpyes (:issue:`21274`) - .. _whatsnew_0240.docs: diff --git a/pandas/core/generic.py b/pandas/core/generic.py index 9e4eda1bc4dc7..2adc15651ffca 100644 --- a/pandas/core/generic.py +++ b/pandas/core/generic.py @@ -8519,7 +8519,7 @@ def describe_numeric_1d(series): stat_index = (['count', 'mean', 'std', 'min'] + formatted_percentiles + ['max']) d = ([series.count(), series.mean(), series.std(), series.min()] + - [series.quantile(x) for x in percentiles] + [series.max()]) + series.quantile(percentiles).tolist() + [series.max()]) return pd.Series(d, index=stat_index, name=series.name) def describe_categorical_1d(data):