Skip to content

Commit 70d80d8

Browse files
Backport PR #53055 on branch 2.0.x (BUG: Fix regression when printing backslash in DataFrame.to_string) (#53107)
Backport PR #53055: BUG: Fix regression when printing backslash in DataFrame.to_string Co-authored-by: Gianluca Ficarelli <[email protected]>
1 parent 71601f5 commit 70d80d8

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
@@ -1397,25 +1397,100 @@ def test_to_string_no_index(self):
13971397
assert df_s == expected
13981398

13991399
def test_to_string_line_width_no_index(self):
1400-
# GH 13998, GH 22505, # GH 49230
1400+
# GH 13998, GH 22505
14011401
df = DataFrame({"x": [1, 2, 3], "y": [4, 5, 6]})
14021402

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

14061406
assert df_s == expected
14071407

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

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

14131413
assert df_s == expected
14141414

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

14171417
df_s = df.to_string(line_width=1, index=False)
1418-
expected = " x \n 11 \\\n 22 \n-33 \n\n y \n 4 \n 5 \n-6 "
1418+
expected = " x \\\n 11 \n 22 \n-33 \n\n y \n 4 \n 5 \n-6 "
1419+
1420+
assert df_s == expected
1421+
1422+
def test_to_string_line_width_no_header(self):
1423+
# GH 53054
1424+
df = DataFrame({"x": [1, 2, 3], "y": [4, 5, 6]})
1425+
1426+
df_s = df.to_string(line_width=1, header=False)
1427+
expected = "0 1 \\\n1 2 \n2 3 \n\n0 4 \n1 5 \n2 6 "
1428+
1429+
assert df_s == expected
1430+
1431+
df = DataFrame({"x": [11, 22, 33], "y": [4, 5, 6]})
1432+
1433+
df_s = df.to_string(line_width=1, header=False)
1434+
expected = "0 11 \\\n1 22 \n2 33 \n\n0 4 \n1 5 \n2 6 "
1435+
1436+
assert df_s == expected
1437+
1438+
df = DataFrame({"x": [11, 22, -33], "y": [4, 5, -6]})
1439+
1440+
df_s = df.to_string(line_width=1, header=False)
1441+
expected = "0 11 \\\n1 22 \n2 -33 \n\n0 4 \n1 5 \n2 -6 "
1442+
1443+
assert df_s == expected
1444+
1445+
def test_to_string_line_width_no_index_no_header(self):
1446+
# GH 53054
1447+
df = DataFrame({"x": [1, 2, 3], "y": [4, 5, 6]})
1448+
1449+
df_s = df.to_string(line_width=1, index=False, header=False)
1450+
expected = "1 \\\n2 \n3 \n\n4 \n5 \n6 "
1451+
1452+
assert df_s == expected
1453+
1454+
df = DataFrame({"x": [11, 22, 33], "y": [4, 5, 6]})
1455+
1456+
df_s = df.to_string(line_width=1, index=False, header=False)
1457+
expected = "11 \\\n22 \n33 \n\n4 \n5 \n6 "
1458+
1459+
assert df_s == expected
1460+
1461+
df = DataFrame({"x": [11, 22, -33], "y": [4, 5, -6]})
1462+
1463+
df_s = df.to_string(line_width=1, index=False, header=False)
1464+
expected = " 11 \\\n 22 \n-33 \n\n 4 \n 5 \n-6 "
1465+
1466+
assert df_s == expected
1467+
1468+
def test_to_string_line_width_with_both_index_and_header(self):
1469+
# GH 53054
1470+
df = DataFrame({"x": [1, 2, 3], "y": [4, 5, 6]})
1471+
1472+
df_s = df.to_string(line_width=1)
1473+
expected = (
1474+
" x \\\n0 1 \n1 2 \n2 3 \n\n y \n0 4 \n1 5 \n2 6 "
1475+
)
1476+
1477+
assert df_s == expected
1478+
1479+
df = DataFrame({"x": [11, 22, 33], "y": [4, 5, 6]})
1480+
1481+
df_s = df.to_string(line_width=1)
1482+
expected = (
1483+
" x \\\n0 11 \n1 22 \n2 33 \n\n y \n0 4 \n1 5 \n2 6 "
1484+
)
1485+
1486+
assert df_s == expected
1487+
1488+
df = DataFrame({"x": [11, 22, -33], "y": [4, 5, -6]})
1489+
1490+
df_s = df.to_string(line_width=1)
1491+
expected = (
1492+
" x \\\n0 11 \n1 22 \n2 -33 \n\n y \n0 4 \n1 5 \n2 -6 "
1493+
)
14191494

14201495
assert df_s == expected
14211496

0 commit comments

Comments
 (0)