Issue 1:
Code Sample, a copy-pastable example if possible

df = pd.DataFrame(list(range(9)), pd.MultiIndex.from_product([['a', 'b', 'c'], [1, 2, 3]]), ['col'])
df.index
# MultiIndex(levels=[['a', 'b', 'c'], [1, 2, 3]],
# labels=[[0, 0, 0, 1, 1, 1, 2, 2, 2], [0, 1, 2, 0, 1, 2, 0, 1, 2]])
df.to_parquet('test.parquet', engine='fastparquet')
df1 = pd.read_parquet('test.parquet')
df1.index
# MultiIndex(levels=[['a', 'a', 'a', 'b', 'b', 'b', 'c', 'c', 'c'], [1, 2, 3, 1, 2, 3, 1, 2, 3]],
# labels=[[0, 1, 2, 3, 4, 5, 6, 7, 8], [0, 1, 2, 3, 4, 5, 6, 7, 8]],
# names=['level_0', 'level_1'])
#
df.loc['a', 1]
# col 0
# Name: (a, 1), dtype: int64
df1.loc['a', 1]
# Traceback (most recent call last):
# File "<stdin>", line 1, in <module>
# File "/usr/local/lib/python3.7/site-packages/pandas/core/indexing.py", line 1472, in __getitem__
# return self._getitem_tuple(key)
# File "/usr/local/lib/python3.7/site-packages/pandas/core/indexing.py", line 870, in _getitem_tuple
# return self._getitem_lowerdim(tup)
# File "/usr/local/lib/python3.7/site-packages/pandas/core/indexing.py", line 1027, in _getitem_lowerdim
# return getattr(section, self.name)[new_key]
# File "/usr/local/lib/python3.7/site-packages/pandas/core/indexing.py", line 1472, in __getitem__
# return self._getitem_tuple(key)
# File "/usr/local/lib/python3.7/site-packages/pandas/core/indexing.py", line 870, in _getitem_tuple
# return self._getitem_lowerdim(tup)
# File "/usr/local/lib/python3.7/site-packages/pandas/core/indexing.py", line 998, in _getitem_lowerdim
# section = self._getitem_axis(key, axis=i)
# File "/usr/local/lib/python3.7/site-packages/pandas/core/indexing.py", line 1911, in _getitem_axis
# self._validate_key(key, axis)
# File "/usr/local/lib/python3.7/site-packages/pandas/core/indexing.py", line 1788, in _validate_key
# key = self._convert_scalar_indexer(key, axis)
# File "/usr/local/lib/python3.7/site-packages/pandas/core/indexing.py", line 261, in _convert_scalar_indexer
# return ax._convert_scalar_indexer(key, kind=self.name)
# File "/usr/local/lib/python3.7/site-packages/pandas/core/indexes/base.py", line 1679, in _convert_scalar_indexer
# return self._invalid_indexer('label', key)
# File "/usr/local/lib/python3.7/site-packages/pandas/core/indexes/base.py", line 1863, in _invalid_indexer
# kind=type(key)))
# TypeError: cannot do label indexing on <class 'pandas.core.indexes.base.Index'> with these indexers [1] of <class 'int'>

Problem description

When importing DataFrame by read_parquet(), MultiIndex.levels becomes large and duplicated.

The imported DataFrame fails indexing.

Output of pd.show_versions()

[paste the output of pd.show_versions() here below this line]

INSTALLED VERSIONS

commit: None

python: 3.7.0.final.0

python-bits: 64

OS: Darwin

OS-release: 17.7.0

machine: x86_64

processor: i386

byteorder: little

LC_ALL: None

LANG: zh_CN.UTF-8

LOCALE: zh_CN.UTF-8

pandas: 0.23.3

pytest: None

pip: 10.0.1

setuptools: 39.2.0

Cython: 0.28.4

numpy: 1.14.5

scipy: 1.1.0

pyarrow: None

xarray: None

IPython: None

sphinx: None

patsy: None

dateutil: 2.7.3

pytz: 2018.5

blosc: None

bottleneck: None

tables: None

numexpr: None

feather: None

matplotlib: None

openpyxl: None

xlrd: None

xlwt: None

xlsxwriter: None

lxml: None

bs4: 4.6.0

html5lib: None

sqlalchemy: None

pymysql: None

psycopg2: None

jinja2: None

s3fs: None

fastparquet: 0.1.5

pandas_gbq: None

pandas_datareader: None

Issue 2:
Code Sample, a copy-pastable example if possible

In [2]: df = pd.DataFrame(index=range(3), columns=['A', 'B', 'C', 'D', 'E', 'F'])

In [3]: df.loc[0, ['A', 'D']] = (1,2)

In [4]: df.loc[:, ['B', 'E']] = (1,2)

In [5]: df[['C', 'F']] = (1,2)

In [6]: df
Out[6]:
A B C D E F
0 1 1 1 2 2 2
1 NaN 1 1 NaN 2 2
2 NaN 1 1 NaN 2 2

In [7]: dfdup = pd.DataFrame(index=range(3), columns=['A', 'B', 'C']*2)

In [8]: dfdup.loc[0, 'A'] = (1,2) # Works

In [9]: dfdup.loc[:, 'B'] = (1,2) # Works

In [10]: dfdup['C'] = (1,2) # Fails
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-10-17d5611af828> in <module>()
----> 1 dfdup['C'] = (1,2)

/home/pietro/nobackup/repo/pandas/pandas/core/frame.py in __setitem__(self, key, value)
2421 else:
2422 # set column
-> 2423 self._set_item(key, value)
2424
2425 def _setitem_slice(self, key, value):

/home/pietro/nobackup/repo/pandas/pandas/core/frame.py in _set_item(self, key, value)
2487
2488 self._ensure_valid_index(value)
-> 2489 value = self._sanitize_column(key, value)
2490 NDFrame._set_item(self, key, value)
2491

/home/pietro/nobackup/repo/pandas/pandas/core/frame.py in _sanitize_column(self, key, value, broadcast)
2658
2659 # turn me into an ndarray
-> 2660 value = _sanitize_index(value, self.index, copy=False)
2661 if not isinstance(value, (np.ndarray, Index)):
2662 if isinstance(value, list) and len(value) > 0:

/home/pietro/nobackup/repo/pandas/pandas/core/series.py in _sanitize_index(data, index, copy)
2847
2848 if len(data) != len(index):
-> 2849 raise ValueError('Length of values does not match length of ' 'index')
2850
2851 if isinstance(data, PeriodIndex):

ValueError: Length of values does not match length of index

In [11]: dfdup
Out[11]:
A B C A B C
0 1 1 NaN 2 2 NaN
1 NaN 1 NaN NaN 2 NaN
2 NaN 1 NaN NaN 2 NaN

Problem description

While loc correctly treats A as referring to two columns, DataFrame[.] sees one value only and raises. Note that Series[.] behaves correctly:

In [12]: s = pd.Series(index=['A', 'B']*2)

In [13]: s.loc['A'] = (1,2)

In [14]: s
Out[14]:
A 1.0
B NaN
A 2.0
B NaN
dtype: float64

In [15]: s['B'] = (1,2)

In [16]: s
Out[16]:
A 1.0
B 1.0
A 2.0
B 2.0
dtype: float64

Expected Output

Out[6] (except for column names, obviously)

Output of pd.show_versions()

INSTALLED VERSIONS

commit: None

python: 3.5.3.final.0

python-bits: 64

OS: Linux

OS-release: 4.7.0-1-amd64

machine: x86_64

processor:

byteorder: little

LC_ALL: None

LANG: it_IT.utf8

LOCALE: it_IT.UTF-8

pandas: 0.19.0+605.gc081d5782

pytest: 3.0.6

pip: 9.0.1

setuptools: 33.1.1

Cython: 0.25.2

numpy: 1.12.0

scipy: 0.18.1

xarray: None

IPython: 5.1.0.dev

sphinx: 1.4.9

patsy: 0.3.0-dev

dateutil: 2.5.3

pytz: 2016.7

blosc: None

bottleneck: 1.2.0

tables: 3.3.0

numexpr: 2.6.1

feather: 0.3.1

matplotlib: 2.0.0

openpyxl: 2.3.0

xlrd: 1.0.0

xlwt: 1.1.2

xlsxwriter: 0.9.6

lxml: 3.7.1

bs4: 4.5.3

html5lib: 0.999999999

sqlalchemy: 1.0.15

pymysql: None

psycopg2: None

jinja2: 2.8

s3fs: None

pandas_gbq: None

pandas_datareader: 0.2.1