Skip to content

Commit 6077b88

Browse files
PERF: Period plotting performance (#24308)
* PERF: Period plotting performance Setup ```python In [3]: N = 2000 ...: M = 5 ...: idx = date_range('1/1/1975', periods=N) ...: df = DataFrame(np.random.randn(N, M), index=idx) ``` Master: ```python In [3]: %time df.plot() CPU times: user 274 ms, sys: 66.7 ms, total: 340 ms Wall time: 377 ms Out[3]: <matplotlib.axes._subplots.AxesSubplot at 0x11eda6128> ``` HEAD: ```python In [4]: %time df.plot() CPU times: user 141 ms, sys: 32.6 ms, total: 173 ms Wall time: 194 ms Out[4]: <matplotlib.axes._subplots.AxesSubplot at 0x11550a5f8> ```
1 parent 66fb798 commit 6077b88

File tree

2 files changed

+9
-7
lines changed

2 files changed

+9
-7
lines changed

pandas/plotting/_converter.py

+8-6
Original file line numberDiff line numberDiff line change
@@ -9,14 +9,14 @@
99
import matplotlib.units as units
1010
import numpy as np
1111

12-
from pandas._libs import tslibs
12+
from pandas._libs import lib, tslibs
1313
from pandas._libs.tslibs import resolution
1414
import pandas.compat as compat
1515
from pandas.compat import lrange
1616

1717
from pandas.core.dtypes.common import (
1818
is_datetime64_ns_dtype, is_float, is_float_dtype, is_integer,
19-
is_integer_dtype, is_nested_list_like, is_period_arraylike)
19+
is_integer_dtype, is_nested_list_like)
2020
from pandas.core.dtypes.generic import ABCSeries
2121

2222
import pandas.core.common as com
@@ -242,13 +242,15 @@ def _convert_1d(values, units, axis):
242242
if (isinstance(values, valid_types) or is_integer(values) or
243243
is_float(values)):
244244
return get_datevalue(values, axis.freq)
245-
if isinstance(values, PeriodIndex):
245+
elif isinstance(values, PeriodIndex):
246246
return values.asfreq(axis.freq)._ndarray_values
247-
if isinstance(values, Index):
247+
elif isinstance(values, Index):
248248
return values.map(lambda x: get_datevalue(x, axis.freq))
249-
if is_period_arraylike(values):
249+
elif lib.infer_dtype(values) == 'period':
250+
# https://github.com/pandas-dev/pandas/issues/24304
251+
# convert ndarray[period] -> PeriodIndex
250252
return PeriodIndex(values, freq=axis.freq)._ndarray_values
251-
if isinstance(values, (list, tuple, np.ndarray, Index)):
253+
elif isinstance(values, (list, tuple, np.ndarray, Index)):
252254
return [get_datevalue(x, axis.freq) for x in values]
253255
return values
254256

setup.cfg

+1-1
Original file line numberDiff line numberDiff line change
@@ -118,7 +118,7 @@ known_post_core=pandas.tseries,pandas.io,pandas.plotting
118118
sections=FUTURE,STDLIB,THIRDPARTY,PRE_CORE,DTYPES,FIRSTPARTY,POST_CORE,LOCALFOLDER
119119

120120
known_first_party=pandas
121-
known_third_party=Cython,numpy,dateutil,python-dateutil,pytz,pyarrow,pytest
121+
known_third_party=Cython,numpy,dateutil,matplotlib,python-dateutil,pytz,pyarrow,pytest
122122
multi_line_output=4
123123
force_grid_wrap=0
124124
combine_as_imports=True

0 commit comments

Comments
 (0)