@@ -2165,7 +2165,7 @@ def should_store(self, value):
2165
2165
2166
2166
2167
2167
class DatetimeLikeBlockMixin (object ):
2168
- """Mixin class for DatetimeBlock and DatetimeTZBlock ."""
2168
+ """Mixin class for DatetimeBlock, DatetimeTZBlock, and TimedeltaBlock ."""
2169
2169
2170
2170
@property
2171
2171
def _holder (self ):
@@ -2857,15 +2857,17 @@ def to_native_types(self, slicer=None, na_rep=None, date_format=None,
2857
2857
""" convert to our native types format, slicing if desired """
2858
2858
2859
2859
values = self .values
2860
+ i8values = self .values .view ('i8' )
2861
+
2860
2862
if slicer is not None :
2861
- values = values [..., slicer ]
2863
+ i8values = i8values [..., slicer ]
2862
2864
2863
2865
from pandas .io .formats .format import _get_format_datetime64_from_values
2864
2866
format = _get_format_datetime64_from_values (values , date_format )
2865
2867
2866
2868
result = tslib .format_array_from_datetime (
2867
- values . view ( 'i8' ) .ravel (), tz = getattr (self .values , 'tz' , None ),
2868
- format = format , na_rep = na_rep ).reshape (values .shape )
2869
+ i8values .ravel (), tz = getattr (self .values , 'tz' , None ),
2870
+ format = format , na_rep = na_rep ).reshape (i8values .shape )
2869
2871
return np .atleast_2d (result )
2870
2872
2871
2873
def should_store (self , value ):
@@ -3115,8 +3117,16 @@ def get_block_type(values, dtype=None):
3115
3117
dtype = dtype or values .dtype
3116
3118
vtype = dtype .type
3117
3119
3118
- if is_categorical (values ):
3120
+ if is_sparse (dtype ):
3121
+ # Need this first(ish) so that Sparse[datetime] is sparse
3122
+ cls = ExtensionBlock
3123
+ elif is_categorical (values ):
3119
3124
cls = CategoricalBlock
3125
+ elif issubclass (vtype , np .datetime64 ):
3126
+ assert not is_datetime64tz_dtype (values )
3127
+ cls = DatetimeBlock
3128
+ elif is_datetime64tz_dtype (values ):
3129
+ cls = DatetimeTZBlock
3120
3130
elif is_interval_dtype (dtype ) or is_period_dtype (dtype ):
3121
3131
cls = ObjectValuesExtensionBlock
3122
3132
elif is_extension_array_dtype (values ):
@@ -3128,11 +3138,6 @@ def get_block_type(values, dtype=None):
3128
3138
cls = TimeDeltaBlock
3129
3139
elif issubclass (vtype , np .complexfloating ):
3130
3140
cls = ComplexBlock
3131
- elif issubclass (vtype , np .datetime64 ):
3132
- assert not is_datetime64tz_dtype (values )
3133
- cls = DatetimeBlock
3134
- elif is_datetime64tz_dtype (values ):
3135
- cls = DatetimeTZBlock
3136
3141
elif issubclass (vtype , np .integer ):
3137
3142
cls = IntBlock
3138
3143
elif dtype == np .bool_ :
0 commit comments