@@ -72,9 +72,6 @@ def __init__(self, values, items, ref_items, ndim=None, fastpath=False, placemen
72
72
self .items = _ensure_index (items )
73
73
self .ref_items = _ensure_index (ref_items )
74
74
75
- def _gi (self , arg ):
76
- return self .values [arg ]
77
-
78
75
@property
79
76
def _consolidate_key (self ):
80
77
return (self ._can_consolidate , self .dtype .name )
@@ -1165,9 +1162,6 @@ def __init__(self, values, items, ref_items, fastpath=False, placement=None, **k
1165
1162
super (DatetimeBlock , self ).__init__ (values , items , ref_items ,
1166
1163
fastpath = True , placement = placement , ** kwargs )
1167
1164
1168
- def _gi (self , arg ):
1169
- return lib .Timestamp (self .values [arg ])
1170
-
1171
1165
def _can_hold_element (self , element ):
1172
1166
if is_list_like (element ):
1173
1167
element = np .array (element )
@@ -1200,7 +1194,7 @@ def _try_coerce_result(self, result):
1200
1194
if result .dtype == 'i8' :
1201
1195
result = tslib .array_to_datetime (
1202
1196
result .astype (object ).ravel ()).reshape (result .shape )
1203
- elif isinstance (result , np .integer ):
1197
+ elif isinstance (result , ( np .integer , np . datetime64 ) ):
1204
1198
result = lib .Timestamp (result )
1205
1199
return result
1206
1200
@@ -1267,10 +1261,9 @@ def set(self, item, value):
1267
1261
self .values [loc ] = value
1268
1262
1269
1263
def get_values (self , dtype = None ):
1264
+ # return object dtype as Timestamps
1270
1265
if dtype == object :
1271
- flat_i8 = self .values .ravel ().view (np .int64 )
1272
- res = tslib .ints_to_pydatetime (flat_i8 )
1273
- return res .reshape (self .values .shape )
1266
+ return lib .map_infer (self .values .ravel (), lib .Timestamp ).reshape (self .values .shape )
1274
1267
return self .values
1275
1268
1276
1269
@@ -2272,7 +2265,8 @@ def xs(self, key, axis=1, copy=True):
2272
2265
2273
2266
def fast_2d_xs (self , loc , copy = False ):
2274
2267
"""
2275
-
2268
+ get a cross sectional for a given location in the
2269
+ items ; handle dups
2276
2270
"""
2277
2271
if len (self .blocks ) == 1 :
2278
2272
result = self .blocks [0 ].values [:, loc ]
@@ -2284,15 +2278,20 @@ def fast_2d_xs(self, loc, copy=False):
2284
2278
raise Exception ('cannot get view of mixed-type or '
2285
2279
'non-consolidated DataFrame' )
2286
2280
2287
- dtype = _interleaved_dtype (self .blocks )
2288
-
2289
2281
items = self .items
2282
+
2283
+ # non-unique (GH4726)
2284
+ if not items .is_unique :
2285
+ return self ._interleave (items ).ravel ()
2286
+
2287
+ # unique
2288
+ dtype = _interleaved_dtype (self .blocks )
2290
2289
n = len (items )
2291
2290
result = np .empty (n , dtype = dtype )
2292
2291
for blk in self .blocks :
2293
2292
for j , item in enumerate (blk .items ):
2294
2293
i = items .get_loc (item )
2295
- result [i ] = blk ._gi (( j , loc ))
2294
+ result [i ] = blk ._try_coerce_result ( blk . iget (( j , loc ) ))
2296
2295
2297
2296
return result
2298
2297
0 commit comments