Skip to content

Commit 68350db

Browse files
BUG: Fix regression when printing backslash in DataFrame.to_string
1 parent 86a4ee0 commit 68350db

File tree

3 files changed

+81
-11
lines changed

3 files changed

+81
-11
lines changed

doc/source/whatsnew/v2.0.2.rst

+1-1
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ including other versions of pandas.
1414
Fixed regressions
1515
~~~~~~~~~~~~~~~~~
1616
- Fixed regression in :meth:`DataFrame.loc` losing :class:`MultiIndex` name when enlarging object (:issue:`53053`)
17-
-
17+
- Fixed regression in :meth:`DataFrame.to_string` printing a backslash at the end of the first row of data, instead of headers, when the DataFrame doesn't fit the line width (:issue:`53054`)
1818

1919
.. ---------------------------------------------------------------------------
2020
.. _whatsnew_202.bug_fixes:

pandas/io/formats/string.py

+1-6
Original file line numberDiff line numberDiff line change
@@ -135,19 +135,14 @@ def _join_multiline(self, strcols_input: Iterable[list[str]]) -> str:
135135
col_bins = _binify(col_widths, lwidth)
136136
nbins = len(col_bins)
137137

138-
if self.fmt.is_truncated_vertically:
139-
assert self.fmt.max_rows_fitted is not None
140-
nrows = self.fmt.max_rows_fitted + 1
141-
else:
142-
nrows = len(self.frame)
143-
144138
str_lst = []
145139
start = 0
146140
for i, end in enumerate(col_bins):
147141
row = strcols[start:end]
148142
if self.fmt.index:
149143
row.insert(0, idx)
150144
if nbins > 1:
145+
nrows = len(row[-1])
151146
if end <= len(strcols) and i < nbins - 1:
152147
row.append([" \\"] + [" "] * (nrows - 1))
153148
else:

pandas/tests/io/formats/test_format.py

+79-4
Original file line numberDiff line numberDiff line change
@@ -1446,25 +1446,100 @@ def test_to_string_no_index(self):
14461446
assert df_s == expected
14471447

14481448
def test_to_string_line_width_no_index(self):
1449-
# GH 13998, GH 22505, # GH 49230
1449+
# GH 13998, GH 22505
14501450
df = DataFrame({"x": [1, 2, 3], "y": [4, 5, 6]})
14511451

14521452
df_s = df.to_string(line_width=1, index=False)
1453-
expected = " x \n 1 \\\n 2 \n 3 \n\n y \n 4 \n 5 \n 6 "
1453+
expected = " x \\\n 1 \n 2 \n 3 \n\n y \n 4 \n 5 \n 6 "
14541454

14551455
assert df_s == expected
14561456

14571457
df = DataFrame({"x": [11, 22, 33], "y": [4, 5, 6]})
14581458

14591459
df_s = df.to_string(line_width=1, index=False)
1460-
expected = " x \n11 \\\n22 \n33 \n\n y \n 4 \n 5 \n 6 "
1460+
expected = " x \\\n11 \n22 \n33 \n\n y \n 4 \n 5 \n 6 "
14611461

14621462
assert df_s == expected
14631463

14641464
df = DataFrame({"x": [11, 22, -33], "y": [4, 5, -6]})
14651465

14661466
df_s = df.to_string(line_width=1, index=False)
1467-
expected = " x \n 11 \\\n 22 \n-33 \n\n y \n 4 \n 5 \n-6 "
1467+
expected = " x \\\n 11 \n 22 \n-33 \n\n y \n 4 \n 5 \n-6 "
1468+
1469+
assert df_s == expected
1470+
1471+
def test_to_string_line_width_no_header(self):
1472+
# GH 53054
1473+
df = DataFrame({"x": [1, 2, 3], "y": [4, 5, 6]})
1474+
1475+
df_s = df.to_string(line_width=1, header=False)
1476+
expected = "0 1 \\\n1 2 \n2 3 \n\n0 4 \n1 5 \n2 6 "
1477+
1478+
assert df_s == expected
1479+
1480+
df = DataFrame({"x": [11, 22, 33], "y": [4, 5, 6]})
1481+
1482+
df_s = df.to_string(line_width=1, header=False)
1483+
expected = "0 11 \\\n1 22 \n2 33 \n\n0 4 \n1 5 \n2 6 "
1484+
1485+
assert df_s == expected
1486+
1487+
df = DataFrame({"x": [11, 22, -33], "y": [4, 5, -6]})
1488+
1489+
df_s = df.to_string(line_width=1, header=False)
1490+
expected = "0 11 \\\n1 22 \n2 -33 \n\n0 4 \n1 5 \n2 -6 "
1491+
1492+
assert df_s == expected
1493+
1494+
def test_to_string_line_width_no_index_no_header(self):
1495+
# GH 53054
1496+
df = DataFrame({"x": [1, 2, 3], "y": [4, 5, 6]})
1497+
1498+
df_s = df.to_string(line_width=1, index=False, header=False)
1499+
expected = "1 \\\n2 \n3 \n\n4 \n5 \n6 "
1500+
1501+
assert df_s == expected
1502+
1503+
df = DataFrame({"x": [11, 22, 33], "y": [4, 5, 6]})
1504+
1505+
df_s = df.to_string(line_width=1, index=False, header=False)
1506+
expected = "11 \\\n22 \n33 \n\n4 \n5 \n6 "
1507+
1508+
assert df_s == expected
1509+
1510+
df = DataFrame({"x": [11, 22, -33], "y": [4, 5, -6]})
1511+
1512+
df_s = df.to_string(line_width=1, index=False, header=False)
1513+
expected = " 11 \\\n 22 \n-33 \n\n 4 \n 5 \n-6 "
1514+
1515+
assert df_s == expected
1516+
1517+
def test_to_string_line_width_with_both_index_and_header(self):
1518+
# GH 53054
1519+
df = DataFrame({"x": [1, 2, 3], "y": [4, 5, 6]})
1520+
1521+
df_s = df.to_string(line_width=1)
1522+
expected = (
1523+
" x \\\n0 1 \n1 2 \n2 3 \n\n y \n0 4 \n1 5 \n2 6 "
1524+
)
1525+
1526+
assert df_s == expected
1527+
1528+
df = DataFrame({"x": [11, 22, 33], "y": [4, 5, 6]})
1529+
1530+
df_s = df.to_string(line_width=1)
1531+
expected = (
1532+
" x \\\n0 11 \n1 22 \n2 33 \n\n y \n0 4 \n1 5 \n2 6 "
1533+
)
1534+
1535+
assert df_s == expected
1536+
1537+
df = DataFrame({"x": [11, 22, -33], "y": [4, 5, -6]})
1538+
1539+
df_s = df.to_string(line_width=1)
1540+
expected = (
1541+
" x \\\n0 11 \n1 22 \n2 -33 \n\n y \n0 4 \n1 5 \n2 -6 "
1542+
)
14681543

14691544
assert df_s == expected
14701545

0 commit comments

Comments
 (0)