Skip to content

Commit 92069c0

Browse files
committed
to_csv headers kwarg now works regardless of index flag
1 parent 21565a3 commit 92069c0

File tree

2 files changed

+26
-16
lines changed

2 files changed

+26
-16
lines changed

pandas/core/format.py

Lines changed: 10 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1194,6 +1194,14 @@ def _save_header(self):
11941194
has_aliases = isinstance(header, (tuple, list, np.ndarray))
11951195
if not (has_aliases or self.header):
11961196
return
1197+
if has_aliases:
1198+
if len(header) != len(cols):
1199+
raise ValueError(('Writing %d cols but got %d aliases'
1200+
% (len(cols), len(header))))
1201+
else:
1202+
write_cols = header
1203+
else:
1204+
write_cols = cols
11971205

11981206
if self.index:
11991207
# should write something for index label
@@ -1219,22 +1227,8 @@ def _save_header(self):
12191227
else:
12201228
encoded_labels = []
12211229

1222-
if has_aliases:
1223-
if len(header) != len(cols):
1224-
raise ValueError(('Writing %d cols but got %d aliases'
1225-
% (len(cols), len(header))))
1226-
else:
1227-
write_cols = header
1228-
else:
1229-
write_cols = cols
1230-
1231-
if not has_mi_columns:
1232-
encoded_labels += list(write_cols)
1233-
1234-
else:
1235-
1236-
if not has_mi_columns:
1237-
encoded_labels += list(cols)
1230+
if not has_mi_columns:
1231+
encoded_labels += list(write_cols)
12381232

12391233
# write out the mi
12401234
if has_mi_columns:

pandas/tests/test_frame.py

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5836,6 +5836,22 @@ def test_to_csv_no_index(self):
58365836
result = read_csv(path)
58375837
assert_frame_equal(df,result)
58385838

5839+
def test_to_csv_headers(self):
5840+
# GH6186, the presence or absence of `index` incorrectly
5841+
# causes to_csv to have different header semantics.
5842+
pname = '__tmp_to_csv_headers__'
5843+
from_df = DataFrame([[1, 2], [3, 4]], columns=['A', 'B'])
5844+
to_df = DataFrame([[1, 2], [3, 4]], columns=['X', 'Y'])
5845+
with ensure_clean(pname) as path:
5846+
from_df.to_csv(path, header=['X', 'Y'])
5847+
recons = DataFrame.from_csv(path)
5848+
assert_frame_equal(to_df, recons)
5849+
5850+
from_df.to_csv(path, index=False, header=['X', 'Y'])
5851+
recons = DataFrame.from_csv(path)
5852+
recons.reset_index(inplace=True)
5853+
assert_frame_equal(to_df, recons)
5854+
58395855
def test_to_csv_multiindex(self):
58405856

58415857
pname = '__tmp_to_csv_multiindex__'

0 commit comments

Comments
 (0)