Skip to content

Commit a74ec93

Browse files
committed
Merge pull request #2875 from jreback/sparse
BUG: issue in get_dtype_counts for SparseDataFrame (introduced by dtypes)
2 parents cb5e7dd + cb6dba0 commit a74ec93

File tree

2 files changed

+45
-0
lines changed

2 files changed

+45
-0
lines changed

pandas/sparse/frame.py

+12
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,11 @@ def shape(self):
4242
def axes(self):
4343
return [self.sp_frame.columns, self.sp_frame.index]
4444

45+
@property
46+
def blocks(self):
47+
""" return our series in the column order """
48+
s = self.sp_frame._series
49+
return [ self.iget(i) for i in self.sp_frame.columns ]
4550

4651
class SparseDataFrame(DataFrame):
4752
"""
@@ -235,6 +240,13 @@ def to_dense(self):
235240
data = dict((k, v.to_dense()) for k, v in self.iteritems())
236241
return DataFrame(data, index=self.index)
237242

243+
def get_dtype_counts(self):
244+
from collections import defaultdict
245+
d = defaultdict(int)
246+
for k, v in self.iteritems():
247+
d[v.dtype.name] += 1
248+
return Series(d)
249+
238250
def astype(self, dtype):
239251
raise NotImplementedError
240252

pandas/sparse/tests/test_sparse.py

+33
Original file line numberDiff line numberDiff line change
@@ -821,6 +821,39 @@ def test_constructor_convert_index_once(self):
821821
sdf = SparseDataFrame(columns=range(4), index=arr)
822822
self.assertTrue(sdf[0].index is sdf[1].index)
823823

824+
def test_constructor_from_series(self):
825+
826+
# GH 2873
827+
x = Series(np.random.randn(10000), name='a')
828+
x = x.to_sparse(fill_value=0)
829+
self.assert_(isinstance(x,SparseSeries))
830+
df = SparseDataFrame(x)
831+
self.assert_(isinstance(df,SparseDataFrame))
832+
833+
x = Series(np.random.randn(10000), name ='a')
834+
y = Series(np.random.randn(10000), name ='b')
835+
x.ix[:9998] = 0
836+
x = x.to_sparse(fill_value=0)
837+
838+
# currently fails
839+
#df1 = SparseDataFrame([x, y])
840+
841+
def test_dtypes(self):
842+
df = DataFrame(np.random.randn(10000, 4))
843+
df.ix[:9998] = np.nan
844+
sdf = df.to_sparse()
845+
846+
result = sdf.get_dtype_counts()
847+
expected = Series({ 'float64' : 4 })
848+
assert_series_equal(result, expected)
849+
850+
def test_str(self):
851+
df = DataFrame(np.random.randn(10000, 4))
852+
df.ix[:9998] = np.nan
853+
sdf = df.to_sparse()
854+
855+
str(sdf)
856+
824857
def test_array_interface(self):
825858
res = np.sqrt(self.frame)
826859
dres = np.sqrt(self.frame.to_dense())

0 commit comments

Comments
 (0)