Skip to content

Commit 37638cc

Browse files
committed
wip
1 parent 4e0d91f commit 37638cc

File tree

4 files changed

+40
-50
lines changed

4 files changed

+40
-50
lines changed

pandas/core/arrays/base.py

+3-3
Original file line numberDiff line numberDiff line change
@@ -680,8 +680,8 @@ def __repr__(self):
680680
length=len(self),
681681
dtype=self.dtype)
682682

683-
def _formatter(self, boxed=False):
684-
# type: (bool) -> Callable[Any]
683+
def _formatter(self, formatter):
684+
# type: (ExtensionArrayFormatter) -> Callable[Any]
685685
"""Formatting function for scalar values.
686686
687687
This is used in the default '__repr__'. The formatting function
@@ -693,7 +693,7 @@ def _formatter(self, boxed=False):
693693
Whether the formatter is to be used by pandas inside a Series
694694
or DataFrame repr.
695695
"""
696-
return str
696+
return formatter.formatter or str
697697

698698
def _formatting_values(self):
699699
# type: () -> np.ndarray

pandas/core/internals/blocks.py

+1-3
Original file line numberDiff line numberDiff line change
@@ -1963,9 +1963,7 @@ def formatting_values(self):
19631963
warnings.warn(msg, FutureWarning, stacklevel=10)
19641964
return self.values._formatting_values()
19651965

1966-
# the future implementation (and current, if not overrode)
1967-
formatter = self.values._formatter(boxed=True)
1968-
return np.array([formatter(x) for x in self.values], dtype=object)
1966+
return self.values
19691967

19701968
def concat_same_type(self, to_concat, placement=None):
19711969
"""

pandas/io/formats/format.py

+25-35
Original file line numberDiff line numberDiff line change
@@ -16,11 +16,12 @@
1616
from pandas.compat import StringIO, lzip, map, u, zip
1717

1818
from pandas.core.dtypes.common import (
19-
is_categorical_dtype, is_datetime64_dtype, is_datetimetz, is_float,
20-
is_float_dtype, is_integer, is_integer_dtype, is_interval_dtype,
21-
is_list_like, is_numeric_dtype, is_period_arraylike, is_scalar,
22-
is_timedelta64_dtype)
23-
from pandas.core.dtypes.generic import ABCMultiIndex, ABCSparseArray
19+
is_categorical_dtype, is_datetime64_dtype, is_datetimetz,
20+
is_extension_array_dtype, is_float, is_float_dtype, is_integer,
21+
is_integer_dtype, is_list_like, is_numeric_dtype, is_period_arraylike,
22+
is_scalar, is_timedelta64_dtype)
23+
from pandas.core.dtypes.generic import (
24+
ABCIndex, ABCMultiIndex, ABCSeries, ABCSparseArray)
2425
from pandas.core.dtypes.missing import isna, notna
2526

2627
from pandas import compat
@@ -849,22 +850,20 @@ def _get_column_name_list(self):
849850
def format_array(values, formatter, float_format=None, na_rep='NaN',
850851
digits=None, space=None, justify='right', decimal='.'):
851852

852-
if is_categorical_dtype(values):
853-
fmt_klass = CategoricalArrayFormatter
854-
elif is_interval_dtype(values):
855-
fmt_klass = IntervalArrayFormatter
853+
if is_period_arraylike(values):
854+
fmt_klass = PeriodArrayFormatter
855+
elif is_datetime64_dtype(values.dtype):
856+
fmt_klass = Datetime64Formatter
857+
elif is_timedelta64_dtype(values.dtype):
858+
fmt_klass = Timedelta64Formatter
859+
elif is_extension_array_dtype(values.dtype):
860+
fmt_klass = ExtensionArrayFormatter
856861
elif is_float_dtype(values.dtype):
857862
fmt_klass = FloatArrayFormatter
858-
elif is_period_arraylike(values):
859-
fmt_klass = PeriodArrayFormatter
860863
elif is_integer_dtype(values.dtype):
861864
fmt_klass = IntArrayFormatter
862865
elif is_datetimetz(values):
863866
fmt_klass = Datetime64TZFormatter
864-
elif is_datetime64_dtype(values.dtype):
865-
fmt_klass = Datetime64Formatter
866-
elif is_timedelta64_dtype(values.dtype):
867-
fmt_klass = Timedelta64Formatter
868867
else:
869868
fmt_klass = GenericArrayFormatter
870869

@@ -1126,14 +1125,18 @@ def _format_strings(self):
11261125
return fmt_values.tolist()
11271126

11281127

1129-
class IntervalArrayFormatter(GenericArrayFormatter):
1130-
1131-
def __init__(self, values, *args, **kwargs):
1132-
GenericArrayFormatter.__init__(self, values, *args, **kwargs)
1133-
1128+
class ExtensionArrayFormatter(GenericArrayFormatter):
11341129
def _format_strings(self):
1135-
formatter = self.formatter or str
1136-
fmt_values = np.array([formatter(x) for x in self.values])
1130+
values = self.values
1131+
if isinstance(values, (ABCIndex, ABCSeries)):
1132+
values = values._values
1133+
1134+
formatter = self.values._formatter(self)
1135+
fmt_values = format_array(np.asarray(self.values),
1136+
formatter,
1137+
float_format=self.float_format,
1138+
na_rep=self.na_rep, digits=self.digits,
1139+
space=self.space, justify=self.justify)
11371140
return fmt_values
11381141

11391142

@@ -1152,19 +1155,6 @@ def _format_strings(self):
11521155
return fmt_values
11531156

11541157

1155-
class CategoricalArrayFormatter(GenericArrayFormatter):
1156-
1157-
def __init__(self, values, *args, **kwargs):
1158-
GenericArrayFormatter.__init__(self, values, *args, **kwargs)
1159-
1160-
def _format_strings(self):
1161-
fmt_values = format_array(self.values.get_values(), self.formatter,
1162-
float_format=self.float_format,
1163-
na_rep=self.na_rep, digits=self.digits,
1164-
space=self.space, justify=self.justify)
1165-
return fmt_values
1166-
1167-
11681158
def format_percentiles(percentiles):
11691159
"""
11701160
Outputs rounded and formatted percentiles.

pandas/tests/arrays/test_period.py

+11-9
Original file line numberDiff line numberDiff line change
@@ -215,14 +215,16 @@ def test_repr_large():
215215
arr = period_array(['2000', '2001'] * 500, freq='D')
216216
result = str(arr)
217217
expected = (
218-
'<PeriodArray>\n'
219-
'[2000-01-01, 2001-01-01, 2000-01-01, 2001-01-01, 2000-01-01, '
220-
'2001-01-01,\n' # continuation
221-
' 2000-01-01, 2001-01-01, 2000-01-01, 2001-01-01,\n'
222-
' ...\n'
223-
' 2000-01-01, 2001-01-01, 2000-01-01, 2001-01-01, 2000-01-01, '
224-
'2001-01-01,\n' # continuation
225-
' 2000-01-01, 2001-01-01, 2000-01-01, 2001-01-01]\n'
226-
'Length: 1000, dtype: period[D]'
218+
"<PeriodArray>\n"
219+
"['2000-01-01', '2001-01-01', '2000-01-01', '2001-01-01', "
220+
"'2000-01-01',\n"
221+
" '2001-01-01', '2000-01-01', '2001-01-01', '2000-01-01', "
222+
"'2001-01-01',\n"
223+
" ...\n"
224+
" '2000-01-01', '2001-01-01', '2000-01-01', '2001-01-01', "
225+
"'2000-01-01',\n"
226+
" '2001-01-01', '2000-01-01', '2001-01-01', '2000-01-01', "
227+
"'2001-01-01']\n"
228+
"Length: 1000, dtype: period[D]"
227229
)
228230
assert result == expected

0 commit comments

Comments
 (0)