Skip to content

Commit fedfff8

Browse files
author
Ben Kandel
committed
fix multiindex column parsing
1 parent 518982d commit fedfff8

File tree

2 files changed

+14
-4
lines changed

2 files changed

+14
-4
lines changed

pandas/io/parsers.py

+4-2
Original file line numberDiff line numberDiff line change
@@ -1509,10 +1509,10 @@ def read(self, nrows=None):
15091509
if self._first_chunk:
15101510
self._first_chunk = False
15111511
names = self._maybe_dedup_names(self.orig_names)
1512-
15131512
index, columns, col_dict = _get_empty_meta(
15141513
names, self.index_col, self.index_names,
15151514
dtype=self.kwds.get('dtype'))
1515+
columns = self._maybe_make_multi_index_columns(columns, self.col_names)
15161516

15171517
if self.usecols is not None:
15181518
columns = self._filter_usecols(columns)
@@ -1979,8 +1979,10 @@ def read(self, rows=None):
19791979
if not len(content): # pragma: no cover
19801980
# DataFrame with the right metadata, even though it's length 0
19811981
names = self._maybe_dedup_names(self.orig_names)
1982-
return _get_empty_meta(names, self.index_col,
1982+
index, columns, col_dict = _get_empty_meta(names, self.index_col,
19831983
self.index_names)
1984+
columns = self._maybe_make_multi_index_columns(columns, self.col_names)
1985+
return index, columns, col_dict
19841986

19851987
# handle new style for names in index
19861988
count_empty_content_vals = count_empty_vals(content[0])

pandas/io/tests/parser/common.py

+10-2
Original file line numberDiff line numberDiff line change
@@ -611,15 +611,23 @@ def test_multi_index_blank_df(self):
611611
data = """a,b
612612
"""
613613
df = self.read_csv(StringIO(data), header=[0])
614-
expected = DataFrame(columns=[('a',), ('b',)])
614+
expected = DataFrame(columns=['a', 'b'])
615615
tm.assert_frame_equal(df, expected)
616+
round_trip = self.read_csv(StringIO(
617+
expected.to_csv(index=False)), header=[0])
618+
tm.assert_frame_equal(round_trip, expected)
616619

617620
data_multiline = """a,b
618621
c,d
619622
"""
620623
df2 = self.read_csv(StringIO(data_multiline), header=[0, 1])
621-
expected2 = DataFrame(columns=[('a', 'c'), ('b', 'd')])
624+
cols = MultiIndex.from_tuples([('a','c'), ('b', 'd')])
625+
expected2 = DataFrame(columns=cols)
622626
tm.assert_frame_equal(df2, expected2)
627+
round_trip = self.read_csv(StringIO(
628+
expected2.to_csv(index=False)), header=[0, 1])
629+
tm.assert_frame_equal(round_trip, expected2)
630+
623631

624632
def test_no_unnamed_index(self):
625633
data = """ id c0 c1 c2

0 commit comments

Comments
 (0)