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

import pandas as pd
import numpy as np

fill_value = 0
#fill_value = np.nan

df0 = pd.DataFrame({'A': [1, fill_value, fill_value]})
df1 = pd.DataFrame({'B': ['a','b','c']})

c = pd.concat([df0, df1], axis=1)
print(c) # >>> OK
print(c['A']) # >>> OK
print(c['B']) # >>> OK

#========================
print("=====================")
df0_s = df0.to_sparse(fill_value = fill_value)
c = pd.concat([df0_s, df1], axis=1)
print(c) # >>> OK
print(c['A']) # >>> OK
print(c['B']) # >>> ERROR: 'IntBlock' object has no attribute 'sp_index'

Problem description

The above code fails, when using mixed type data on segmenting the frame.

A possible work-around is to recast the resulting sparse dataframe to a dense data frame via

c_new = pd.DataFrame(c)

At the bootom of this it seems that pandas.concat always uses the highest class object in the to catenate list, e.g. here the SparseDataFrame, to store teh resulting values in. This effectively works deep, below, however, the on surface interfaces are kind of blown out if the data contained is not as expected.

This might be a very similar issue as #18551 (#18551)

Expected Output

well, hard to say if SparseDataFrames are to handle mixed type data (possibly keeping some of the columns sparse, other dense), or if pd.concat should fall back to a dense DataFrame here. Anyhow, the issue should be fixed one way or another,

Output of pd.show_versions()

INSTALLED VERSIONS

commit: None

python: 3.6.1.final.0

python-bits: 64

OS: Windows

OS-release: 10

machine: AMD64

processor: Intel64 Family 6 Model 94 Stepping 3, GenuineIntel

byteorder: little

LC_ALL: None

LANG: None

LOCALE: None.None

pandas: 0.21.0

pytest: 3.0.7

pip: 9.0.1

setuptools: 27.2.0

Cython: 0.25.2

numpy: 1.13.3

scipy: 0.19.1

pyarrow: None

xarray: None

IPython: 5.3.0

sphinx: 1.5.6

patsy: 0.4.1

dateutil: 2.6.0

pytz: 2017.2

blosc: None

bottleneck: 1.2.1

tables: 3.2.2

numexpr: 2.6.2

feather: None

matplotlib: 2.0.2

openpyxl: 2.4.7

xlrd: 1.0.0

xlwt: 1.2.0

xlsxwriter: 0.9.6

lxml: 3.7.3

bs4: 4.6.0

html5lib: 0.999

sqlalchemy: 1.1.9

pymysql: None

psycopg2: None

jinja2: 2.9.6

s3fs: None

fastparquet: None

pandas_gbq: None

pandas_datareader: None

Issue 2:
xref #15737

Code Sample, a copy-pastable example if possible

import pandas as pd

pd.concat([pd.DataFrame([0.0]), pd.SparseDataFrame([0.0])], axis=1).isnull()
pd.concat([pd.DataFrame([0.0]), pd.SparseDataFrame([0.0])], axis=1).density
pd.concat([pd.DataFrame([0.0], columns=['A']), pd.SparseDataFrame([0.0])], axis=1)['A']
pd.concat([pd.DataFrame([0.0], columns=['A']), pd.SparseDataFrame([0.0])], axis=1).iloc[0,0]

Problem description

Each of the above lines generates an error when the dataframes are of mixed sparsity, but would succeed if both dataframes were dense or both were sparse. This means that we can't seamlessly swap sparse dataframes for dense ones without knowing how they'll be used downstream.

Expected Output

Each line does not generate an error.

Output of pd.show_versions()

##INSTALLED VERSIONS

commit: None

python: 3.5.2.final.0

python-bits: 64

OS: Windows

OS-release: 10

machine: AMD64

processor: Intel64 Family 6 Model 63 Stepping 2, GenuineIntel

byteorder: little

LC_ALL: None

LANG: None

LOCALE: None.None

pandas: 0.20.2

pytest: 2.9.2

pip: 8.1.2

setuptools: 27.2.0

Cython: 0.25.2

numpy: 1.13.0

scipy: 0.18.1

xarray: None

IPython: 5.1.0

sphinx: 1.4.6

patsy: 0.4.1

dateutil: 2.5.3

pytz: 2016.6.1

blosc: None

bottleneck: 1.1.0

tables: 3.2.2

numexpr: 2.6.1

feather: None

matplotlib: 2.0.2

openpyxl: 2.3.2

xlrd: 1.0.0

xlwt: 1.1.2

xlsxwriter: 0.9.3

lxml: 3.6.4

bs4: 4.5.1

html5lib: None

sqlalchemy: 1.0.13

pymysql: None

psycopg2: None

jinja2: 2.8

s3fs: None

pandas_gbq: None

pandas_datareader: 0.4.0