16
16
from pandas .compat import StringIO , lzip , map , u , zip
17
17
18
18
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 )
24
25
from pandas .core .dtypes .missing import isna , notna
25
26
26
27
from pandas import compat
@@ -849,22 +850,20 @@ def _get_column_name_list(self):
849
850
def format_array (values , formatter , float_format = None , na_rep = 'NaN' ,
850
851
digits = None , space = None , justify = 'right' , decimal = '.' ):
851
852
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
856
861
elif is_float_dtype (values .dtype ):
857
862
fmt_klass = FloatArrayFormatter
858
- elif is_period_arraylike (values ):
859
- fmt_klass = PeriodArrayFormatter
860
863
elif is_integer_dtype (values .dtype ):
861
864
fmt_klass = IntArrayFormatter
862
865
elif is_datetimetz (values ):
863
866
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
868
867
else :
869
868
fmt_klass = GenericArrayFormatter
870
869
@@ -1126,14 +1125,18 @@ def _format_strings(self):
1126
1125
return fmt_values .tolist ()
1127
1126
1128
1127
1129
- class IntervalArrayFormatter (GenericArrayFormatter ):
1130
-
1131
- def __init__ (self , values , * args , ** kwargs ):
1132
- GenericArrayFormatter .__init__ (self , values , * args , ** kwargs )
1133
-
1128
+ class ExtensionArrayFormatter (GenericArrayFormatter ):
1134
1129
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 )
1137
1140
return fmt_values
1138
1141
1139
1142
@@ -1152,19 +1155,6 @@ def _format_strings(self):
1152
1155
return fmt_values
1153
1156
1154
1157
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
-
1168
1158
def format_percentiles (percentiles ):
1169
1159
"""
1170
1160
Outputs rounded and formatted percentiles.
0 commit comments