Skip to content

Commit 5c72096

Browse files
committed
Fix pandas-dev#25099 set na_rep values before converting to string to prevent data truncation
1 parent f75a220 commit 5c72096

File tree

2 files changed

+18
-1
lines changed

2 files changed

+18
-1
lines changed

pandas/core/internals/blocks.py

+2-1
Original file line numberDiff line numberDiff line change
@@ -738,12 +738,13 @@ def to_native_types(self, slicer=None, na_rep='nan', quoting=None,
738738
values = values[:, slicer]
739739
mask = isna(values)
740740

741+
values[mask] = na_rep
742+
741743
if not self.is_object and not quoting:
742744
values = values.astype(str)
743745
else:
744746
values = np.array(values, dtype='object')
745747

746-
values[mask] = na_rep
747748
return values
748749

749750
# block actions ####

pandas/tests/io/formats/test_to_csv.py

+16
Original file line numberDiff line numberDiff line change
@@ -561,3 +561,19 @@ def test_to_csv_compression(self, compression_only,
561561
result = pd.read_csv(path, index_col=0,
562562
compression=read_compression)
563563
tm.assert_frame_equal(result, df)
564+
565+
def test_to_csv_na_rep_long_string(self, capsys):
566+
# see gh-25099
567+
df = pd.DataFrame({"c": [float('nan')] * 3})
568+
df = df.astype("Int64")
569+
expected_rows = ['c',
570+
'mynull',
571+
'mynull',
572+
'mynull']
573+
expected_ascii = tm.convert_rows_list_to_csv_str(expected_rows)
574+
575+
df.to_csv(sys.stdout, index=False, na_rep='mynull', encoding='ascii')
576+
captured = capsys.readouterr()
577+
578+
assert captured.out == expected_ascii
579+
assert not sys.stdout.closed

0 commit comments

Comments
 (0)