17
17
Sequence ,
18
18
cast ,
19
19
)
20
- import warnings
21
20
22
21
import numpy as np
23
22
27
26
NDFrameT ,
28
27
npt ,
29
28
)
30
- from pandas .util ._exceptions import find_stack_level
31
29
from pandas .util ._validators import validate_percentile
32
30
33
31
from pandas .core .dtypes .common import (
@@ -56,7 +54,6 @@ def describe_ndframe(
56
54
obj : NDFrameT ,
57
55
include : str | Sequence [str ] | None ,
58
56
exclude : str | Sequence [str ] | None ,
59
- datetime_is_numeric : bool ,
60
57
percentiles : Sequence [float ] | np .ndarray | None ,
61
58
) -> NDFrameT :
62
59
"""Describe series or dataframe.
@@ -71,8 +68,6 @@ def describe_ndframe(
71
68
A white list of data types to include in the result. Ignored for ``Series``.
72
69
exclude : list-like of dtypes or None (default), optional,
73
70
A black list of data types to omit from the result. Ignored for ``Series``.
74
- datetime_is_numeric : bool, default False
75
- Whether to treat datetime dtypes as numeric.
76
71
percentiles : list-like of numbers, optional
77
72
The percentiles to include in the output. All should fall between 0 and 1.
78
73
The default is ``[.25, .5, .75]``, which returns the 25th, 50th, and
@@ -88,14 +83,12 @@ def describe_ndframe(
88
83
if obj .ndim == 1 :
89
84
describer = SeriesDescriber (
90
85
obj = cast ("Series" , obj ),
91
- datetime_is_numeric = datetime_is_numeric ,
92
86
)
93
87
else :
94
88
describer = DataFrameDescriber (
95
89
obj = cast ("DataFrame" , obj ),
96
90
include = include ,
97
91
exclude = exclude ,
98
- datetime_is_numeric = datetime_is_numeric ,
99
92
)
100
93
101
94
result = describer .describe (percentiles = percentiles )
@@ -109,13 +102,10 @@ class NDFrameDescriberAbstract(ABC):
109
102
----------
110
103
obj : Series or DataFrame
111
104
Object to be described.
112
- datetime_is_numeric : bool
113
- Whether to treat datetime dtypes as numeric.
114
105
"""
115
106
116
- def __init__ (self , obj : DataFrame | Series , datetime_is_numeric : bool ) -> None :
107
+ def __init__ (self , obj : DataFrame | Series ) -> None :
117
108
self .obj = obj
118
- self .datetime_is_numeric = datetime_is_numeric
119
109
120
110
@abstractmethod
121
111
def describe (self , percentiles : Sequence [float ] | np .ndarray ) -> DataFrame | Series :
@@ -136,7 +126,6 @@ class SeriesDescriber(NDFrameDescriberAbstract):
136
126
def describe (self , percentiles : Sequence [float ] | np .ndarray ) -> Series :
137
127
describe_func = select_describe_func (
138
128
self .obj ,
139
- self .datetime_is_numeric ,
140
129
)
141
130
return describe_func (self .obj , percentiles )
142
131
@@ -152,8 +141,6 @@ class DataFrameDescriber(NDFrameDescriberAbstract):
152
141
A white list of data types to include in the result.
153
142
exclude : list-like of dtypes or None
154
143
A black list of data types to omit from the result.
155
- datetime_is_numeric : bool
156
- Whether to treat datetime dtypes as numeric.
157
144
"""
158
145
159
146
def __init__ (
@@ -162,22 +149,21 @@ def __init__(
162
149
* ,
163
150
include : str | Sequence [str ] | None ,
164
151
exclude : str | Sequence [str ] | None ,
165
- datetime_is_numeric : bool ,
166
152
) -> None :
167
153
self .include = include
168
154
self .exclude = exclude
169
155
170
156
if obj .ndim == 2 and obj .columns .size == 0 :
171
157
raise ValueError ("Cannot describe a DataFrame without columns" )
172
158
173
- super ().__init__ (obj , datetime_is_numeric = datetime_is_numeric )
159
+ super ().__init__ (obj )
174
160
175
161
def describe (self , percentiles : Sequence [float ] | np .ndarray ) -> DataFrame :
176
162
data = self ._select_data ()
177
163
178
164
ldesc : list [Series ] = []
179
165
for _ , series in data .items ():
180
- describe_func = select_describe_func (series , self . datetime_is_numeric )
166
+ describe_func = select_describe_func (series )
181
167
ldesc .append (describe_func (series , percentiles ))
182
168
183
169
col_names = reorder_columns (ldesc )
@@ -193,9 +179,7 @@ def _select_data(self):
193
179
"""Select columns to be described."""
194
180
if (self .include is None ) and (self .exclude is None ):
195
181
# when some numerics are found, keep only numerics
196
- default_include : list [npt .DTypeLike ] = [np .number ]
197
- if self .datetime_is_numeric :
198
- default_include .append ("datetime" )
182
+ default_include : list [npt .DTypeLike ] = [np .number , "datetime" ]
199
183
data = self .obj .select_dtypes (include = default_include )
200
184
if len (data .columns ) == 0 :
201
185
data = self .obj
@@ -360,34 +344,20 @@ def describe_timestamp_1d(data: Series, percentiles: Sequence[float]) -> Series:
360
344
361
345
def select_describe_func (
362
346
data : Series ,
363
- datetime_is_numeric : bool ,
364
347
) -> Callable :
365
348
"""Select proper function for describing series based on data type.
366
349
367
350
Parameters
368
351
----------
369
352
data : Series
370
353
Series to be described.
371
- datetime_is_numeric : bool
372
- Whether to treat datetime dtypes as numeric.
373
354
"""
374
355
if is_bool_dtype (data .dtype ):
375
356
return describe_categorical_1d
376
357
elif is_numeric_dtype (data ):
377
358
return describe_numeric_1d
378
359
elif is_datetime64_any_dtype (data .dtype ):
379
- if datetime_is_numeric :
380
- return describe_timestamp_1d
381
- else :
382
- warnings .warn (
383
- "Treating datetime data as categorical rather than numeric in "
384
- "`.describe` is deprecated and will be removed in a future "
385
- "version of pandas. Specify `datetime_is_numeric=True` to "
386
- "silence this warning and adopt the future behavior now." ,
387
- FutureWarning ,
388
- stacklevel = find_stack_level (),
389
- )
390
- return describe_timestamp_as_categorical_1d
360
+ return describe_timestamp_1d
391
361
elif is_timedelta64_dtype (data .dtype ):
392
362
return describe_numeric_1d
393
363
else :
0 commit comments