Empty string as subindex changes the shape
#### Code Sample, a copy-pastable example if possible
Example 1:
```python
import pandas as pd
import numpy as np
index = ['col1:sub1', 'col1:sub2', 'col2']
df = pd.DataFrame(np.random.random(size=(10, len(index))), columns = index)
df.columns = df.columns.str.split(':', expand=True)
for key in df.columns.levels[0]:
    print(key, df.loc[:, key].shape)

index = ['col1:sub1', 'col1:sub2']
df = pd.DataFrame(np.random.random(size=(10, len(index))), columns = index)
df.columns = df.columns.str.split(':', expand=True)
df.loc[:, 'col2'] = np.random.random(size=(10))
for key in df.columns.levels[0]:
    print(key, df.loc[:, key].shape)
```
Example 2:
```python
import pandas as pd
import numpy as np
index = pd.MultiIndex.from_tuples([
        ('col1', ''),
        ('col2', np.nan),
        ('col3', 'sub1'), ('col3', 'sub2'),
        ('col4', ''), ('col4', 'sub2'),
        ('col5', np.nan), ('col5', 'sub2')])
df = pd.DataFrame(np.random.random(size=(10, len(index))), columns = index)
for key in df.columns.levels[0]:
    print(key, df.loc[:, key].shape)

```
#### Problem description

maybe related to #25154

This issue arises when one wants to work with mixed length MultiIndex. For example if I have a name and  pH at different concentration, I would like to  access `df.loc[:, 'name']` that would give me a Series, and `df.loc[:, 'pH']` that would give me a DataFrame.

To achieve that, pandas uses `''` as a subindex. Intuitively I would have thought that `nan` would have been a better choice! For example in example 1, if one uses `split` with `expand=True`, the missing values are filled with `nan`, while adding a column at a latter stage adds a `''`. Example 2 show that if the subindex is not alone, It is considered to be a DataFrame anyway.

In my opinion, it would be more intuitive if `('col2', np.nan)` was acting like `('col2', '')`. Example1 would show the same result for both techniques. 

Perhaps more controversial, I think that  the subindex of `df.loc[:, 'col2'] = np.random.random(size=(10))` should probably be `nan`, as this is the standard way of indicating missing data, and no data has been provided.

#### Expected Output
Example 1
```
col1 (10, 2)
col2 (10,)
col1 (10, 2)
col2 (10,)
```
#### Output of ``pd.show_versions()``

<details>

INSTALLED VERSIONS
------------------
commit: None
python: 3.7.0.final.0
python-bits: 64
OS: Darwin
OS-release: 18.2.0
machine: x86_64
processor: i386
byteorder: little
LC_ALL: en_US.UTF-8
LANG: en_US.UTF-8
LOCALE: en_US.UTF-8

pandas: 0.24.1
pytest: 4.2.0
pip: 18.0
setuptools: 40.4.1
Cython: 0.28.5
numpy: 1.15.2
scipy: 1.2.0
pyarrow: None
xarray: None
IPython: 7.0.1
sphinx: 1.8.1
patsy: None
dateutil: 2.7.3
pytz: 2018.5
blosc: None
bottleneck: None
tables: None
numexpr: None
feather: None
matplotlib: 3.0.2
openpyxl: None
xlrd: None
xlwt: None
xlsxwriter: None
lxml.etree: 4.2.5
bs4: None
html5lib: 1.0.1
sqlalchemy: None
pymysql: None
psycopg2: None
jinja2: 2.10
s3fs: None
fastparquet: None
pandas_gbq: None
pandas_datareader: None
gcsfs: None

</details>
