Skip to content

Commit ddb7b84

Browse files
BUG: Fix regression when printing backslash in DataFrame.to_string
1 parent 4a5d32a commit ddb7b84

File tree

3 files changed

+75
-11
lines changed

3 files changed

+75
-11
lines changed

doc/source/whatsnew/v2.0.2.rst

+1-1
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ including other versions of pandas.
1313

1414
Fixed regressions
1515
~~~~~~~~~~~~~~~~~
16-
-
16+
- Bug in :func:`DataFrame.to_string` with ``header=True`` that printed a backslash at the end of the first row of the data, instead of the headers, when the DataFrame doesn't fit the line width (:issue:`53054`)
1717

1818
.. ---------------------------------------------------------------------------
1919
.. _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

+73-4
Original file line numberDiff line numberDiff line change
@@ -1446,25 +1446,94 @@ 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 = " x \\\n0 1 \n1 2 \n2 3 \n\n y \n0 4 \n1 5 \n2 6 "
1523+
1524+
assert df_s == expected
1525+
1526+
df = DataFrame({"x": [11, 22, 33], "y": [4, 5, 6]})
1527+
1528+
df_s = df.to_string(line_width=1)
1529+
expected = " x \\\n0 11 \n1 22 \n2 33 \n\n y \n0 4 \n1 5 \n2 6 "
1530+
1531+
assert df_s == expected
1532+
1533+
df = DataFrame({"x": [11, 22, -33], "y": [4, 5, -6]})
1534+
1535+
df_s = df.to_string(line_width=1)
1536+
expected = " x \\\n0 11 \n1 22 \n2 -33 \n\n y \n0 4 \n1 5 \n2 -6 "
14681537

14691538
assert df_s == expected
14701539

0 commit comments

Comments
 (0)