@@ -849,7 +849,7 @@ def _get_column_name_list(self):
849
849
# Array formatters
850
850
851
851
852
- def format_array (values , formatter = None , float_format = None , na_rep = 'NaN' ,
852
+ def format_array (values , formatter , float_format = None , na_rep = 'NaN' ,
853
853
digits = None , space = None , justify = 'right' , decimal = '.' ,
854
854
leading_space = None ):
855
855
"""
@@ -879,23 +879,14 @@ def format_array(values, formatter=None, float_format=None, na_rep='NaN',
879
879
List[str]
880
880
"""
881
881
882
- if is_extension_array_dtype (values .dtype ):
883
- if isinstance (values , (ABCIndexClass , ABCSeries )):
884
- values = values ._values
885
-
886
- if is_categorical_dtype (values .dtype ):
887
- # Categorical is special for now, so that we can preserve tzinfo
888
- values = values .get_values ()
889
-
890
- if not is_datetime64tz_dtype (values .dtype ):
891
- values = np .asarray (values )
892
-
893
882
if is_datetime64_dtype (values .dtype ):
894
883
fmt_klass = Datetime64Formatter
895
884
elif is_datetime64tz_dtype (values ):
896
885
fmt_klass = Datetime64TZFormatter
897
886
elif is_timedelta64_dtype (values .dtype ):
898
887
fmt_klass = Timedelta64Formatter
888
+ elif is_extension_array_dtype (values .dtype ):
889
+ fmt_klass = ExtensionArrayFormatter
899
890
elif is_float_dtype (values .dtype ) or is_complex_dtype (values .dtype ):
900
891
fmt_klass = FloatArrayFormatter
901
892
elif is_integer_dtype (values .dtype ):
@@ -1190,6 +1181,29 @@ def _format_strings(self):
1190
1181
return fmt_values .tolist ()
1191
1182
1192
1183
1184
+ class ExtensionArrayFormatter (GenericArrayFormatter ):
1185
+ def _format_strings (self ):
1186
+ values = self .values
1187
+ if isinstance (values , (ABCIndexClass , ABCSeries )):
1188
+ values = values ._values
1189
+
1190
+ formatter = values ._formatter (boxed = True )
1191
+
1192
+ if is_categorical_dtype (values .dtype ):
1193
+ # Categorical is special for now, so that we can preserve tzinfo
1194
+ array = values .get_values ()
1195
+ else :
1196
+ array = np .asarray (values )
1197
+
1198
+ fmt_values = format_array (array ,
1199
+ formatter ,
1200
+ float_format = self .float_format ,
1201
+ na_rep = self .na_rep , digits = self .digits ,
1202
+ space = self .space , justify = self .justify ,
1203
+ leading_space = self .leading_space )
1204
+ return fmt_values
1205
+
1206
+
1193
1207
def format_percentiles (percentiles ):
1194
1208
"""
1195
1209
Outputs rounded and formatted percentiles.
0 commit comments