diff --git a/pandas/formats/format.py b/pandas/formats/format.py index 7706666142a64..20065c6d9c4b6 100644 --- a/pandas/formats/format.py +++ b/pandas/formats/format.py @@ -604,8 +604,15 @@ def to_string(self): self._chk_truncate() strcols = self._to_str_columns() text = self.adj.adjoin(1, *strcols) - if not self.index: - text = text.replace('\n ', '\n').strip() + + first_column_dtype = (None if len(frame.columns) == 0 + else frame.dtypes[frame.columns[0]]) + if not self.index and first_column_dtype.kind != 'O': + # Remove a single space from the beginning of each line + # and remove any trailing spaces + if len(text) > 0 and text[0] == ' ': + text = text[1:] + text = text.replace('\n ', '\n').rstrip() self.buf.writelines(text) if self.should_show_dimensions: diff --git a/pandas/tests/formats/test_format.py b/pandas/tests/formats/test_format.py index 3bbfd621d2342..4b070415b5ab9 100644 --- a/pandas/tests/formats/test_format.py +++ b/pandas/tests/formats/test_format.py @@ -1974,11 +1974,46 @@ def test_to_string_no_header(self): self.assertEqual(df_s, expected) def test_to_string_no_index(self): - df = DataFrame({'x': [1, 2, 3], 'y': [4, 5, 6]}) + df = DataFrame({'aaaaa': [100, 200, 300], 'bbbbb': [400, 500, 600]}) + df_s = df.to_string(index=False) + expected = "aaaaa bbbbb\n" \ + " 100 400\n" \ + " 200 500\n" \ + " 300 600" + self.assertEqual(df_s, expected) + df = DataFrame({'aaa': [100, 200, 300], 'bbb': [400, 500, 600]}) df_s = df.to_string(index=False) - expected = "x y\n1 4\n2 5\n3 6" + expected = "aaa bbb\n" \ + "100 400\n" \ + "200 500\n" \ + "300 600" + self.assertEqual(df_s, expected) + df = DataFrame({'a': [100, 200, 300], 'b': [400, 500, 600]}) + df_s = df.to_string(index=False) + expected = " a b\n" \ + "100 400\n" \ + "200 500\n" \ + "300 600" + self.assertEqual(df_s, expected) + + df = DataFrame({'aaaaa': ['xxx', 'xxx', 'xxx'], + 'bbbbb': ['xxx', 'xxx', 'xxx']}) + df_s = df.to_string(index=False) + expected = "aaaaa bbbbb\n" \ + " xxx xxx\n" \ + " xxx xxx\n" \ + " xxx xxx" + self.assertEqual(df_s, expected) + + df = DataFrame({'aaaaa': [-1.0, -2.0, -3.0], + 'bbbbb': [-4.0, -5.0, -6.0]}) + df_s = df.to_string(index=False) + expected = "aaaaa bbbbb\n" \ + " -1.0 -4.0\n" \ + " -2.0 -5.0\n" \ + " -3.0 -6.0" self.assertEqual(df_s, expected) def test_to_string_line_width_no_index(self):