BUG: SparseDataFrame may not preserve passed dtype by sinhrks · Pull Request #13866 · pandas-dev/pandas (original) (raw)

SparseDataFrame may reset passed sparse data's dtype and fill_value as below.

arr = pd.SparseArray([1, 0, 3, 0], dtype=np.int64, fill_value=0)

# OK, dtype and fill_value are kept
s = pd.SparseSeries(arr, name='x')
s.dtype, s.fill_value
(dtype('int64'), 0)

# NG, dtype is reset
df = pd.SparseDataFrame(s)
df['x'].dtype, df['x'].fill_value
(dtype('float64'), 0)

# NG, dtype is reset
df = pd.SparseDataFrame({'x': s})
df['x'].dtype, df['x'].fill_value
(dtype('float64'), 0)

# NG, dtype and fill_value are reset
df = pd.SparseDataFrame({'x': arr})
df['x'].dtype, df['x'].fill_value
(dtype('float64'), nan)