Skip to content

Commit 16407e5

Browse files
committed
perf improvements for other native type writers
1 parent 07b39c8 commit 16407e5

File tree

2 files changed

+10
-7
lines changed

2 files changed

+10
-7
lines changed

doc/source/whatsnew/v0.16.1.txt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,8 @@ API changes
8989
Performance Improvements
9090
~~~~~~~~~~~~~~~~~~~~~~~~
9191

92-
- Improved csv write performance with mixed dtypes, including datetimes (:issue:`9940`)
92+
- Improved csv write performance with mixed dtypes, including datetimes by up to 5x (:issue:`9940`)
93+
- Improved csv write performance generally by 2x (:issue:`9940`)
9394

9495

9596

pandas/core/internals.py

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -490,8 +490,8 @@ def to_native_types(self, slicer=None, na_rep='', **kwargs):
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+
values = values.astype(str)
495495
values[mask] = na_rep
496496
return values.tolist()
497497

@@ -1227,20 +1227,22 @@ def to_native_types(self, slicer=None, na_rep='', float_format=None, decimal='.'
12271227
values = self.values
12281228
if slicer is not None:
12291229
values = values[:, slicer]
1230-
values = np.array(values, dtype=object)
12311230
mask = isnull(values)
1232-
values[mask] = na_rep
1233-
12341231

1232+
formatter = None
12351233
if float_format and decimal != '.':
12361234
formatter = lambda v : (float_format % v).replace('.',decimal,1)
12371235
elif decimal != '.':
12381236
formatter = lambda v : ('%g' % v).replace('.',decimal,1)
12391237
elif float_format:
12401238
formatter = lambda v : float_format % v
1239+
1240+
if formatter is None:
1241+
values = values.astype(str)
12411242
else:
1242-
formatter = None
1243+
values = np.array(values, dtype='object')
12431244

1245+
values[mask] = na_rep
12441246
if formatter:
12451247
imask = (~mask).ravel()
12461248
values.flat[imask] = np.array(
@@ -1770,8 +1772,8 @@ def to_native_types(self, slicer=None, na_rep='', **kwargs):
17701772
if slicer is not None:
17711773
# Categorical is always one dimension
17721774
values = values[slicer]
1773-
values = np.array(values, dtype=object)
17741775
mask = isnull(values)
1776+
values = values.astype(str)
17751777
values[mask] = na_rep
17761778
# Blocks.to_native_type returns list of lists, but we are always only a list
17771779
return [values.tolist()]

0 commit comments

Comments
 (0)