@@ -484,16 +484,21 @@ def _try_coerce_and_cast_result(self, result, dtype=None):
484484 def _try_fill (self , value ):
485485 return value
486486
487- def to_native_types (self , slicer = None , na_rep = '' , ** kwargs ):
487+ def to_native_types (self , slicer = None , na_rep = '' , quoting = None , ** kwargs ):
488488 """ convert to our native types format, slicing if desired """
489489
490490 values = self .values
491491 if slicer is not None :
492492 values = values [:, slicer ]
493- values = np .array (values , dtype = object )
494493 mask = isnull (values )
494+
495+ if not self .is_object and not quoting :
496+ values = values .astype (str )
497+ else :
498+ values = np .array (values , dtype = 'object' )
499+
495500 values [mask ] = na_rep
496- return values . tolist ()
501+ return values
497502
498503 # block actions ####
499504 def copy (self , deep = True ):
@@ -1221,32 +1226,34 @@ def _try_cast(self, element):
12211226 return element
12221227
12231228 def to_native_types (self , slicer = None , na_rep = '' , float_format = None , decimal = '.' ,
1224- ** kwargs ):
1229+ quoting = None , ** kwargs ):
12251230 """ convert to our native types format, slicing if desired """
12261231
12271232 values = self .values
12281233 if slicer is not None :
12291234 values = values [:, slicer ]
1230- values = np .array (values , dtype = object )
12311235 mask = isnull (values )
1232- values [mask ] = na_rep
1233-
12341236
1237+ formatter = None
12351238 if float_format and decimal != '.' :
12361239 formatter = lambda v : (float_format % v ).replace ('.' ,decimal ,1 )
12371240 elif decimal != '.' :
12381241 formatter = lambda v : ('%g' % v ).replace ('.' ,decimal ,1 )
12391242 elif float_format :
12401243 formatter = lambda v : float_format % v
1244+
1245+ if formatter is None and not quoting :
1246+ values = values .astype (str )
12411247 else :
1242- formatter = None
1248+ values = np . array ( values , dtype = 'object' )
12431249
1250+ values [mask ] = na_rep
12441251 if formatter :
12451252 imask = (~ mask ).ravel ()
12461253 values .flat [imask ] = np .array (
12471254 [formatter (val ) for val in values .ravel ()[imask ]])
12481255
1249- return values . tolist ()
1256+ return values
12501257
12511258 def should_store (self , value ):
12521259 # when inserting a column should not coerce integers to floats
@@ -1366,7 +1373,7 @@ def _try_coerce_result(self, result):
13661373 def should_store (self , value ):
13671374 return issubclass (value .dtype .type , np .timedelta64 )
13681375
1369- def to_native_types (self , slicer = None , na_rep = None , ** kwargs ):
1376+ def to_native_types (self , slicer = None , na_rep = None , quoting = None , ** kwargs ):
13701377 """ convert to our native types format, slicing if desired """
13711378
13721379 values = self .values
@@ -1387,7 +1394,7 @@ def to_native_types(self, slicer=None, na_rep=None, **kwargs):
13871394 rvalues .flat [imask ] = np .array ([Timedelta (val )._repr_base (format = 'all' )
13881395 for val in values .ravel ()[imask ]],
13891396 dtype = object )
1390- return rvalues . tolist ()
1397+ return rvalues
13911398
13921399
13931400 def get_values (self , dtype = None ):
@@ -1763,18 +1770,19 @@ def _astype(self, dtype, copy=False, raise_on_error=True, values=None,
17631770 ndim = self .ndim ,
17641771 placement = self .mgr_locs )
17651772
1766- def to_native_types (self , slicer = None , na_rep = '' , ** kwargs ):
1773+ def to_native_types (self , slicer = None , na_rep = '' , quoting = None , ** kwargs ):
17671774 """ convert to our native types format, slicing if desired """
17681775
17691776 values = self .values
17701777 if slicer is not None :
17711778 # Categorical is always one dimension
17721779 values = values [slicer ]
1773- values = np .array (values , dtype = object )
17741780 mask = isnull (values )
1781+ values = np .array (values , dtype = 'object' )
17751782 values [mask ] = na_rep
1776- # Blocks.to_native_type returns list of lists, but we are always only a list
1777- return [values .tolist ()]
1783+
1784+ # we are expected to return a 2-d ndarray
1785+ return values .reshape (1 ,len (values ))
17781786
17791787class DatetimeBlock (Block ):
17801788 __slots__ = ()
@@ -1864,18 +1872,21 @@ def fillna(self, value, limit=None,
18641872 fastpath = True , placement = self .mgr_locs )]
18651873
18661874 def to_native_types (self , slicer = None , na_rep = None , date_format = None ,
1867- ** kwargs ):
1875+ quoting = None , ** kwargs ):
18681876 """ convert to our native types format, slicing if desired """
18691877
18701878 values = self .values
18711879 if slicer is not None :
18721880 values = values [:, slicer ]
18731881
1882+ from pandas .core .format import _get_format_datetime64_from_values
1883+ format = _get_format_datetime64_from_values (values , date_format )
1884+
18741885 result = tslib .format_array_from_datetime (values .view ('i8' ).ravel (),
18751886 tz = None ,
1876- format = date_format ,
1887+ format = format ,
18771888 na_rep = na_rep ).reshape (values .shape )
1878- return result . tolist ()
1889+ return result
18791890
18801891 def should_store (self , value ):
18811892 return issubclass (value .dtype .type , np .datetime64 )
0 commit comments