1616from pandas .compat import StringIO , lzip , map , u , zip
1717
1818from 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 )
2425from pandas .core .dtypes .missing import isna , notna
2526
2627from pandas import compat
@@ -849,22 +850,20 @@ def _get_column_name_list(self):
849850def 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-
11681158def format_percentiles (percentiles ):
11691159 """
11701160 Outputs rounded and formatted percentiles.
0 commit comments